将线程本地数据与 PLINQ AsParallel() 一起使用?
Use thread local data with PLINQ AsParallel()?
当使用 Parallel.Foreach()
时,有一个内置机制来实现线程本地数据。使用 PLINQ AsParallel()
.
时我需要类似的东西
我希望能够编写 PLINQ 语句,例如 list.AsParallel().ProcessElement(threadlocalresource)
。
ThreadLocal<T>
可能会有帮助,但我不明白如何在 PLINQ 语句完成后处理资源。
我查看了 AsParallel()
的源代码,希望 copy/patch 添加该功能并通过大量的依赖关系进入兔子洞......这并不是一件容易的事.
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();
}
}
当使用 Parallel.Foreach()
时,有一个内置机制来实现线程本地数据。使用 PLINQ AsParallel()
.
我希望能够编写 PLINQ 语句,例如 list.AsParallel().ProcessElement(threadlocalresource)
。
ThreadLocal<T>
可能会有帮助,但我不明白如何在 PLINQ 语句完成后处理资源。
我查看了 AsParallel()
的源代码,希望 copy/patch 添加该功能并通过大量的依赖关系进入兔子洞......这并不是一件容易的事.
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();
}
}