【发布时间】:2016-09-16 06:12:07
【问题描述】:
我从 PCL 开始一些并行任务
Parallel.Invoke(() => ExecuteTaskAAsync(), () => ExecuteTaskBAsync());
现在我想知道这些任务在哪个线程上运行。
Thread.CurrentThread.ManagedThreadId 似乎只在 iOS 中可用
和 Droid 项目,但不在 PCL 或 UWP 项目中。我的可能性是什么?如果我使用DependencyService,我也不知道TaskA在哪个线程上运行,因为启动的任务和DependencyService之间没有关系。
如何在 PCL 中获取线程信息(id、名称、...)?
设置断点后,您可以进入Tasks Window 并获取更多信息。此外,您在顶部有一个下拉菜单来选择一个进程,在不同的线程之间进行选择并获取有关堆栈帧的一些信息。那么应该也可以在代码中获取这些信息吗?
编辑:
似乎任务窗口中的信息只有在 UWP 上运行时才可用。
【问题讨论】:
-
显式线程ID真的是必需品吗?如果不是,您可以检查“SynchronizationContext.Current”并检查它们是否等于某些存储的参考。
-
不,不是。我想在日志文件中包含一些线程信息,以查看来自哪个线程的内容。通过您的比较方法,我只能查看它是否是非 UI 线程?在我的示例应用程序中,
SynchronizationContext是null。 -
您可以在Visual Studio中设置TracePoints,在这里您可以将线程ID输出到调试窗口。
-
现在我尝试使用动作
context = {context}设置断点,而SynchronizationContext context = SynchronizationContext.Current;。结果是context = (null)。然后我用thread = $TID试了一下,结果是thread = 0x6。你是那个意思吗?如何在代码中访问类似的内容? -
刚找到这个:github.com/dotnet/corefx/issues/2576 所以看起来你的问题的答案是,目前不可能。如果
TaskSchedule.Current能帮到你,你可以试试。
标签: c# multithreading xamarin portable-class-library