在我的C#日志记录类中,我在日志输出中显示CurrentManagedThreadId
,以便可以遵循特定的执行线程。我还使用线程ID作为唯一键来管理每线程缩进级别(以显示跟踪输出中的嵌套)。
我只是意识到await
并不总是在同一个线程上返回。我不确定为什么我之前没有注意到这一点,但是当我运行WinRT单元测试时,我现在肯定会看到它。
是否有某种“logical-thread-id”(“context-id”?)是唯一的(在并发运行的线程中),并且在等待的方法调用中是常量?
我正在开发.NET Framework(桌面版)和WinRT Win8 / 8.1版。
答案 0 :(得分:4)
简短的回答是" no"。
如果您想在WinRT上跟踪因果关系堆栈,您唯一真正的选择就是按照in this MSDN article所述修改应用中的每个await
。
桌面上有更多选项。例如,我的async diagnostics library将PostSharp与LogicalCallStack
(一种技术I describe on my blog)结合使用,以便为您跟踪因果关系堆栈。