.net NET中可继承的本地线程

.net NET中可继承的本地线程,.net,multithreading,thread-local,.net,Multithreading,Thread Local,.NET4.0引入了类,这很好。现在,我的应用程序用例需要类似Java类的东西。在.NET中有类似的东西吗?如果没有,新线程如何使用来自父线程的线程局部变量初始化其线程局部变量?我想我需要使用,但不确定要放什么。我能想到的最接近的事情是使用CallContext.SetData在线程的CallContext中使用并存储对象 实现iLogicThreadAffinitive的对象将流经逻辑上下文开关,如BeginInvoke和ThreadPool.QueueUserWorkItem。另外请注意,在

.NET4.0引入了类,这很好。现在,我的应用程序用例需要类似Java类的东西。在.NET中有类似的东西吗?如果没有,新线程如何使用来自父线程的线程局部变量初始化其线程局部变量?我想我需要使用,但不确定要放什么。

我能想到的最接近的事情是使用CallContext.SetData在线程的CallContext中使用并存储对象


实现iLogicThreadAffinitive的对象将流经逻辑上下文开关,如BeginInvoke和ThreadPool.QueueUserWorkItem。另外请注意,在使用线程池的情况下,此方法比使用线程局部变量更安全,因为您无法在线程上“串入”线程局部值,并让另一个线程意外获取该值。

一个有趣的问题;这并不是一个直接的答案,但就我个人而言,我倾向于通过将每个线程绑定到上下文实例来完全避免这种情况。然后,我可以在线程之间共享上下文实例,也可以不共享;马克:我同意这是大多数情况下的首选方法。然而,在这种情况下,我的代码可能会调用库代码,而库代码可能(也可能不会)会产生线程来调用我的代码。所以我并不总是控制子线程的创建。我可能能够在每个回调入口放置一个陷阱,以检查是否是一个新线程来初始化其实例数据,但这将比可继承的本地线程存储方法更加尴尬;我只是想提一下,以防你错过了一个更简单的选择。鉴于上述评论,我怀疑您是对的-但我不知道.NET中有类似于
InheritableThreadLocal
的东西,抱歉。我查看了文档,但不确定如何使用它来模拟InheritableThreadLocal的行为。你能再详细说明一下你的答案吗?