当线程池线程完成时,Name或线程本地数据之类的东西会被重置吗? 那么当线程下次从池中出来时,它就像全新的一样?
是否有关于ThreadPool线程这方面的“官方”文档?
答案 0 :(得分:9)
它在发布时不会清除线程本地存储,这是最重要的注意事项。
http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx
当线程池重用线程时,它不会清除数据 线程本地存储或用标记的字段 ThreadStaticAttribute属性。因此,放入的数据 一个方法的线程本地存储可以暴露给任何其他方法 由同一个线程池线程执行。一种方法 访问用ThreadStaticAttribute标记的字段 属性可以根据哪个线程遇到不同的数据 池线程执行它。
这是非常谨慎的事情......
答案 1 :(得分:3)
答案是否定的,它不会被重置。但是,您不应该依赖这个事实,因为无论您的下一个工作项是在新线程上还是在重用线程上执行,都取决于线程池。因此,您可能会或可能不会再次看到Thread Thread Storage。因此,我不建议在线程池上使用线程本地存储。线程池实现是一个内部细节,可以更改。
现实世界的比喻将是你每天上班的公共汽车。让我们说,出于某种原因,你想把你的包放在公共汽车上,因为你知道它不会被盗。这是个坏主意,因为下次上车时你可能找不到行李。仅仅因为它可以是一个不同的总线。公交车站可以在线路之间轮换公交车,也可以配置较旧的公交车。就像线程池可以重用或退出线程而不让你知道。
答案 2 :(得分:2)