如何获取另一个线程的ThreadStatic值?

时间:2015-02-19 11:49:18

标签: c# .net multithreading

是否可以在Thread引用中获取该线程的ThreadStatic值?

1 个答案:

答案 0 :(得分:4)

不,那是不可能的。与此类属性一样,[ThreadStatic]属性由抖动识别。它生成对CLR的调用,以获取指向类的线程本地存储的指针。这个辅助方法有多个版本,基本方法是JIT_GetSharedGCThreadStaticBase()。但是对于泛型类来说它变得更复杂,例如,它可以基于类型参数具有多个静态变量。辅助函数有两个非显而易见的参数,即模块ID和类ID。这些ID取决于加载代码的AppDomain。

长话短说,你没有机会进行同样的调用,辅助方法也没有获取线程ID,这是调用上下文隐含的。

您可以使用Thread.AllocateNamedDataSlot()从线程挂起任意数据。但请注意,它是静态方法,并且不会获取线程ID,它再次基于调用上下文。

这一切都是故意的。线程本地存储的一个非常好的属性是始终线程安全。允许从另一个线程访问它的后门将完全破坏该功能。如果你想这样做,那些应该让你大吃一惊的东西。您可以使用ManagedThreadId键入自己的查找表。