是否在等待时保持不变的CurrentManagedThreadId的替代方案?

时间:2014-12-12 01:41:24

标签: c# windows-runtime windows-store-apps async-await .net-4.5

在我的C#日志记录类中,我在日志输出中显示CurrentManagedThreadId,以便可以遵循特定的执行线程。我还使用线程ID作为唯一键来管理每线程缩进级别(以显示跟踪输出中的嵌套)。

我只是意识到await并不总是在同一个线程上返回。我不确定为什么我之前没有注意到这一点,但是当我运行WinRT单元测试时,我现在肯定会看到它。

是否有某种“logical-thread-id”(“context-id”?)是唯一的(在并发运行的线程中),并且在等待的方法调用中是常量?

我正在开发.NET Framework(桌面版)和WinRT Win8 / 8.1版。

1 个答案:

答案 0 :(得分:4)

简短的回答是" no"。

如果您想在WinRT上跟踪因果关系堆栈,您唯一真正的选择就是按照in this MSDN article所述修改应用中的每个await

桌面上有更多选项。例如,我的async diagnostics library将PostSharp与LogicalCallStack(一种技术I describe on my blog)结合使用,以便为您跟踪因果关系堆栈。