在 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