是否在后台工作者调用之间保留了线程本地存储?

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

具体来说,如果我在后台工作者的DoWork()方法期间设置了一个命名数据槽(线程本地存储),那么该数据槽的值是否会持续存在,以后可能会发现某个其他线程?

我不会这么想,但我有这个错误……

编辑: 这篇博文建议BackGroundWorker使用ThreadPool ,这意味着线程重用。 所以问题就变成了; 重用线程是否可能在调用之间持久保存线程本地存储?

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

来源: http : //msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx

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

如果未指定,则不能依赖于将来版本的.NET中不会更改的当前行为。

编辑:看起来它正在使用线程池,因此线程被重用。