在 Xamarin 中获取线程信息 PCL
Get thread information in Xamarin PCL
我从 PCL 和
开始一些并行任务
Parallel.Invoke(() => ExecuteTaskAAsync(), () => ExecuteTaskBAsync());
现在我想知道这些任务在哪个线程上 运行。
Thread.CurrentThread.ManagedThreadId
似乎只能在 iOS
和 Droid 项目,但不在 PCL 或 UWP 项目中。我的可能性是什么?如果我使用 DependencyService
我也不知道 TaskA 在哪个线程上 运行,因为启动的任务和 DependencyService
.
之间没有关系
如何在 PCL 中获取线程信息(id、名称、...)?
设置断点后,您可以进入 Tasks Window 并获得更多信息。此外,您在顶部有一个下拉菜单 select 一个进程,在不同的线程之间进行选择并获取有关堆栈帧的一些信息。那么应该也可以在代码中获取这些信息?
编辑:
似乎任务 Window 中的信息仅在 UWP 运行 上可用。
Windows Universal Apps 中完全没有线程的概念,建议使用任务而不是线程。
我还没有找到有关其背后原因的官方文档,但正在进行讨论 at the CoreFX's github repo。
因此,如果您想支持 UWP 项目,您正在寻找的内容目前似乎是不可能的。
您也可以寻找管理当前 运行 任务的 TaskScheduler
:
var poolId = TaskScheduler.Current.Id;
这样你至少可以找出,如果你的方法是 运行 在同一个 ThreadPool 上(例如:它们在任何后台线程上执行,或者UI 线程)。
据我所知,要找到 UI 的 TaskScheduler,您必须在 UI 线程上调用 TaskScheduler.Current.Id
并将其存储在变量中.
这对我有用
Environment.CurrentManagedThreadId
我从 PCL 和
开始一些并行任务Parallel.Invoke(() => ExecuteTaskAAsync(), () => ExecuteTaskBAsync());
现在我想知道这些任务在哪个线程上 运行。
Thread.CurrentThread.ManagedThreadId
似乎只能在 iOS
和 Droid 项目,但不在 PCL 或 UWP 项目中。我的可能性是什么?如果我使用 DependencyService
我也不知道 TaskA 在哪个线程上 运行,因为启动的任务和 DependencyService
.
如何在 PCL 中获取线程信息(id、名称、...)?
设置断点后,您可以进入 Tasks Window 并获得更多信息。此外,您在顶部有一个下拉菜单 select 一个进程,在不同的线程之间进行选择并获取有关堆栈帧的一些信息。那么应该也可以在代码中获取这些信息?
编辑:
似乎任务 Window 中的信息仅在 UWP 运行 上可用。
Windows Universal Apps 中完全没有线程的概念,建议使用任务而不是线程。
我还没有找到有关其背后原因的官方文档,但正在进行讨论 at the CoreFX's github repo。
因此,如果您想支持 UWP 项目,您正在寻找的内容目前似乎是不可能的。
您也可以寻找管理当前 运行 任务的 TaskScheduler
:
var poolId = TaskScheduler.Current.Id;
这样你至少可以找出,如果你的方法是 运行 在同一个 ThreadPool 上(例如:它们在任何后台线程上执行,或者UI 线程)。
据我所知,要找到 UI 的 TaskScheduler,您必须在 UI 线程上调用 TaskScheduler.Current.Id
并将其存储在变量中.
这对我有用
Environment.CurrentManagedThreadId