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