后台工作程序调用之间线程本地存储是否持久化?

问题描述 投票:12回答:2

是否重复使用了后台工作人员线程?

特别是,如果我在后台工作程序的DoWork()方法期间设置了一个命名的数据插槽(线程本地存储),该数据插槽的值是否会保留,可能在以后的某个其他线程中找到?] >

我本来不会这样,但是我有这个错误...

编辑:This blog post建议BackGroundWorker使用ThreadPool,这意味着线程are

被重新使用。于是问题变成了;重用的线程是否可能在调用之间保留线程本地存储?

后台工作人员线程是否已重用?具体来说,如果我在后台工作程序的DoWork()方法期间设置了一个命名的数据插槽(线程本地存储),该数据插槽的值将保持不变,...

c# .net multithreading backgroundworker thread-local
2个回答
9
投票

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


-1
投票

如果未在MSDN中指定源,则需要检查源(或通过Reflector确定它)。>

如果未指定,则不能依靠当前行为在.NET的将来版本中不会发生变化。

© www.soinside.com 2019 - 2024. All rights reserved.