C# 在Xamarin PCL中获取线程信息

C# 在Xamarin PCL中获取线程信息,c#,multithreading,xamarin,portable-class-library,C#,Multithreading,Xamarin,Portable Class Library,我从PCL开始执行一些并行任务 Parallel.Invoke(()=>ExecuteTaskAAsync(),()=>ExecuteTaskBAsync()) 现在我想知道这些任务在哪个线程上运行 Thread.CurrentThread.ManagedThreadId似乎仅在iOS中可用 和Droid项目,但不在PCL或UWP项目中。我的可能性是什么?如果我使用DependencyService我也不知道TaskA在哪个线程上运行,因为启动的任务和DependencyService之间没有关

我从PCL开始执行一些并行任务

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

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

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

如何在PCL中获取线程信息(id、名称等)

设置断点后,可以进入并获取更多信息。此外,在顶部还有一个下拉列表,用于选择进程、在不同线程之间进行选择以及获取有关堆栈框架的一些信息。所以我们应该也能在代码中得到这些信息

编辑:


似乎只有在UWP上运行时,“任务”窗口中的信息才可用。

Windows通用应用程序中完全没有线程的概念,建议使用任务而不是线程

我还没有找到关于其背后原因的官方文件,但有一个正在进行的讨论

因此,如果您想支持UWP项目,您目前所寻找的似乎是不可能的

您也可以查找管理当前正在运行的任务的
TaskScheduler

var poolId = TaskScheduler.Current.Id;
通过这种方式,您至少可以了解您的方法是否在同一线程池上运行(例如:它们在任何后台线程或UI线程上执行)

据我所知,要找到UI的TaskScheduler,您必须在UI线程上调用
TaskScheduler.Current.Id
,并将其存储在变量中。

这对我很有用


Environment.CurrentManagedThreadId

显式线程ID真的是一个要求吗?如果不是,您可以检查“SynchronizationContext.Current”,并检查它们是否等于某个存储的引用。不,不是。我想在日志文件中包含一些线程信息,以查看来自哪个线程的内容。通过您的比较方法,我只能看到它是否是非UI线程?在我的示例应用程序中,
SynchronizationContext
null
。您可以在Visual Studio中设置跟踪点,在那里您可以将线程ID输出到调试窗口。现在,我尝试使用action
context={context}
设置断点,而
SynchronizationContext=SynchronizationContext.Current。结果是
context=(null)
。然后我用
thread=$TID
进行了尝试,结果是
thread=0x6
。你是那个意思吗?我如何在代码中访问类似的内容?刚刚发现:看来你的问题的答案是,这目前是不可能的。如果
TaskSchedule.Current
能帮你解决问题,你可以试试。