将线程本地数据与 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();
    }
}