8

如果我设置CurrentCulture了线程池线程,当线程完成执行并返回到线程池时会发生什么?它是否将其CurrentCulture重置为默认值(无论这可能意味着什么),还是会保留我设置的文化?

我希望框架将线程重置为默认状态以防止这种情况发生,但找不到任何有关此效果的文档。我发现的最接近的来自ThreadPool的 MSDN 文档:

线程池重用线程时,不会清除线程本地存储中的数据,也不会清除带有 ThreadStaticAttribute 属性标记的字段中的数据。因此,通过一种方法放置在线程本地存储中的数据可以暴露给由同一线程池线程执行的任何其他方法。

这似乎表明线程在返回时没有被重置。

我已经尝试了一些示例代码来尝试对此进行测试,并且似乎确实重置了文化,但我不相信我正在正确测试此行为,因为我认为我只使用了 ThreadPool 线程的一小部分,并且所以不能确定我正在测试一个已经拥有它的文化集的线程。

4

1 回答 1

8

我不会依赖 ThreadPool重置信息,特别是因为您引用的文本。

如果您担心“改变”线程池的文化,我会确保在您的线程任务完成时重置它。这是一个足够简单的任务。

我不相信当前的线程池会这样做,但即使这样做了,假设 .NET 4+ 的 ThreadPool 实现不会改变也是不安全的。

于 2009-09-23T16:39:54.587 回答