使用PLINQ AsParallel()来使用线程本地数据
本文关键字:线程 数据 PLINQ AsParallel 使用 | 更新日期: 2023-09-27 17:53:57
当使用Parallel.Foreach()
时,有一个内置的机制来实现线程本地数据。当使用PLINQ AsParallel()
时,我需要类似的东西。
我希望能够编写PLINQ语句,如list.AsParallel().ProcessElement(threadlocalresource)
。
ThreadLocal<T>
可能会有所帮助,但我不明白PLINQ语句完成后如何处置资源。
我查看了AsParallel()
的源代码,希望能有一个副本/补丁来添加这个功能,结果却被大量的依赖项所困扰……这可不容易。
PLINQ确实没有对线程本地数据的任何显式支持。如果您仍然认为这是最适合您的组合,那么您可以使用ThreadLocal<T>
及其Values
属性来进行清理。例如:
using (var threadLocal = new ThreadLocal<SomeType>())
{
result = list.AsParallel().Select(/* use threadLocal.Value here */).ToList();
foreach (var resource in threadLocal.Values)
{
resource.Dispose();
}
}