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

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

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

简而言之,你没有机会进行同样的调用,辅助方法也不会采用线程ID,它是由调用上下文隐含的。

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

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