后台工作线程是否重复使用?
具体来说,如果我在后台工作程序的DoWork()方法中设置了一个命名数据槽(线程局部存储),那么该数据槽的值是否会持续存在,以后可能会发现某个其他线程?
我不会这么想,但我有这个错误......
编辑:这篇博客文章表明BackGroundWorker使用ThreadPool,这意味着线程被重用.所以问题就变成了; 重用线程是否可能在调用之间持久保存线程本地存储?
当线程池重用线程时,它不会清除线程本地存储中或使用ThreadStaticAttribute属性标记的字段中的数据.因此,通过一个方法放置在线程本地存储中的数据可以暴露给由同一线程池线程执行的任何其他方法.访问使用ThreadStaticAttribute属性标记的字段的方法可能会遇到不同的数据,具体取决于哪个线程池线程执行它.
来源:http: //msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx