Tag: thread local

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

后台工作线程是否重复使用? 具体来说,如果我在后台工作者的DoWork()方法期间设置了一个命名数据槽(线程本地存储),那么该数据槽的值是否会持续存在,以后可能会发现某个其他线程? 我不会这么想,但我有这个错误…… 编辑: 这篇博文建议BackGroundWorker使用ThreadPool ,这意味着线程被重用。 所以问题就变成了; 重用线程是否可能在调用之间持久保存线程本地存储?

在并行任务期间跟踪死WebDriver实例

我看到一些使用Selenium WebDriver运行并行化嵌套循环Web压力测试的死实例怪异,简单的例子就是说,打出300个独特的页面,每个页面有100个印象。 我“成功地”使用ThreadLocal将4-8个WebDriver实例用于隔离每个任务线程,并在ParallelOptions实例上使用MaxDegreeOfParallelism来限制线程。 我只对外部循环(页面集合)进行分区和并行化,并在每个分区的“长时间运行任务”方法开头的ThreadLocal容器中检查.IsValueCreated 。 为了便于以后清理,我将每个新实例添加到由线程ID键入的ConcurrentDictionary。 无论我使用何种并行或分区策略,WebDriver实例偶尔会执行以下操作之一: 启动但从不显示url或投放展示 启动,运行任意数量的印象,然后在某些时候闲置 当其中任何一个发生时,并行循环最终似乎注意到一个线程没有做任何事情,它产生了一个新的分区。 如果n是允许的线程数,则这导致n个生产线程只有大约50-60%的时间。 清理工作最后仍然可以正常工作; 可能有2n个开放浏览器或更多,但生产性和非生产性的浏览器都得到了清理。 有没有办法监控这些无用的WebDriver实例和a)立即清除它们,加上b)让并行循环立即替换任务段,而不是像现在经常那样滞后几分钟?