.NET线程池线程返回池时是否重置?

.NET线程池线程返回池时是否重置?,.net,multithreading,threadpool,.net,Multithreading,Threadpool,当线程池线程完成时,像名称或线程本地数据这样的东西会被重置吗? 所以下次当线程从池中出来时,它就像是全新的 有关于线程池线程这方面的“官方”文档吗?发布线程本地存储时,它不会清除线程本地存储,这是需要注意的最重要方面 当线程池重用线程时,它不会清除其中的数据 线程本地存储或标记为的字段中 ThreadStaticAttribute属性。因此,放置在 一种方法的线程本地存储可以公开给任何其他方法 由同一线程池线程执行的。一种方法 访问用ThreadStaticAttribute标记的字段 属性可

当线程池线程完成时,像名称或线程本地数据这样的东西会被重置吗? 所以下次当线程从池中出来时,它就像是全新的


有关于线程池线程这方面的“官方”文档吗?

发布线程本地存储时,它不会清除线程本地存储,这是需要注意的最重要方面

当线程池重用线程时,它不会清除其中的数据 线程本地存储或标记为的字段中 ThreadStaticAttribute属性。因此,放置在 一种方法的线程本地存储可以公开给任何其他方法 由同一线程池线程执行的。一种方法 访问用ThreadStaticAttribute标记的字段 属性可能会遇到不同的数据,具体取决于哪个线程 池线程执行它

这是一件需要非常小心的事情…

这是

据我所知,没有重置


在链接的文档中,有一些方法提到了如何应对这种情况

答案是否定的,它不会被重置。但是,您不应该依赖这一事实,因为下一个工作项是在新线程上执行还是在重用线程上执行取决于线程池。因此,您可能会或可能不会再次看到线程本地存储。因此,我不建议在线程池上使用线程本地存储。线程池实现是一个内部细节,需要更改


现实世界的比喻是你每天乘公共汽车去上班。比如说,出于某种原因,你想把包留在车上,因为你知道它不会被偷。这是个坏主意,因为下次你上公共汽车时可能找不到你的包。只是因为它可以是一辆不同的巴士。公共汽车站可以在线路之间轮换公共汽车,也可以处置旧公共汽车。就像线程池可能会重复使用或停用线程,而不会让您知道。

可能会重复感谢msdn的链接。当然,当我查看2.0版本时,信息块丢失了。线程“Name”似乎被清除了。我们的代码库的一部分按照线程的名称将DbContext存储在静态哈希表中,当线程返回池并被重用时,该名称就消失了。