在Xamarin PCL中获取线程信息

时间:2016-05-19 11:32:59

标签: c# multithreading xamarin portable-class-library

我从带有

的PCL开始一些并行任务

Parallel.Invoke(() => ExecuteTaskAAsync(), () => ExecuteTaskBAsync());

现在我想知道这些任务在哪个线程上运行。

Thread.CurrentThread.ManagedThreadId似乎只在iOS中可用 和Droid项目,但不在PCL或UWP项目中。我的可能性是什么?如果我使用DependencyService我也不会知道TaskA正在运行哪个线程,因为启动的任务与DependencyService之间没有关系。

如何在PCL中获取线程信息(id,name,...)?

设置断点时,您可以进入Tasks Window并获取更多信息。您还可以在顶部选择一个进程,在不同的线程之间进行选择,并获得有关堆栈帧的一些信息。那么人们应该能够在代码中获取这些信息吗?

修改

似乎任务窗口中的信息仅在UWP上运行时可用。

2 个答案:

答案 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

相关问题