【问题标题】:Use thread local data with PLINQ AsParallel()?将线程本地数据与 PLINQ AsParallel() 一起使用?
【发布时间】:2016-07-02 13:06:41
【问题描述】:

当使用Parallel.Foreach() 时,有一个内置机制来实现线程本地数据。使用 PLINQ AsParallel() 时我需要类似的东西。

我希望能够编写 PLINQ 语句,例如 list.AsParallel().ProcessElement(threadlocalresource)

ThreadLocal<T> 可能会有所帮助,但我不明白如何在 PLINQ 语句完成后处置资源。

我查看了 AsParallel() 的源代码,希望通过复制/补丁来添加该功能,并通过大量依赖项最终陷入困境……这并不容易实现。

【问题讨论】:

    标签: c# .net multithreading plinq


    【解决方案1】:

    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();
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 2020-09-01
    • 1970-01-01
    相关资源
    最近更新 更多