Parallel.ForEach 具有可枚举的 KeyValuePairs?

Posted

技术标签:

【中文标题】Parallel.ForEach 具有可枚举的 KeyValuePairs?【英文标题】:Parallel.ForEach with Enumerable of KeyValuePairs? 【发布时间】:2020-07-19 13:37:34 【问题描述】:

我是否使用了错误的 Parallel ForEach 重载方法? 当我使用普通的 ForEach 循环时,我能够获取当前项目,它是预期的正确类型 (KeyValuePair)。

但是当我使用 Parallel 版本时,似乎即使我将鼠标悬停在循环中的当前对象上并且它似乎是正确的类型,我仍然没有得到 Value 和 Key 属性。

提前致谢!

static void TestParallelForEachKeyValuePair(IEnumerable<KeyValuePair<Animal, string>> kvps)
    
        foreach (var kvp in kvps)
        
            var test = kvp.Key;
        

        Parallel.ForEach(kvps, (kvp) =>
        
            kvp.
        );
    

ForEach

Parallel ForEach

Hovering the current item inside Parallel ForEach

【问题讨论】:

I can't reproduce this. @AhmedAbdelhameed,感谢您的快速反馈。很高兴知道。这是否意味着某处存在错误?好奇怪。 嗯,我不确定。智能感知可能有问题。如果手动输入var test = kvp.Key; 会发生什么?编译器会抱怨吗?你试过重启VS吗? @AhmedAbdelhameed ,如果我按照您的建议手动分配变量,它会起作用。但是,重新启动 Visual Studio 后,智能感知的问题仍然存在。当我将相同的代码复制到另一台计算机时,它按预期工作。智能感知没有问题。那就不是什么大问题了。我可以忍受这个。再次感谢。 【参考方案1】:

此测试方法有效,但 IntelliSense 未显示“键”和“值” (Windows 窗体)。 所以它的智能感知问题。

    static void TestParallelForEachKeyValuePair()
    
        List<KeyValuePair<int, string>> test = new List<KeyValuePair<int, string>>();
        test.Add(new KeyValuePair<int, string>(1, "test1"));
        test.Add(new KeyValuePair<int, string>(2, "test2"));
        test.Add(new KeyValuePair<int, string>(3, "test3"));


         Parallel.ForEach(test, (x) =>
         
             MessageBox.Show(x.Key + "  " + x.Value);
         );
    

【讨论】:

以上是关于Parallel.ForEach 具有可枚举的 KeyValuePairs?的主要内容,如果未能解决你的问题,请参考以下文章

Parallel.ForEach 会按照 MaxDegreeOfParallelism=1 的顺序进行处理吗?

Parallel.ForEach 没有提供更多内核的加速[关闭]

如何使用 Parallel.ForEach 正确写入文件?

如何限制 Parallel.ForEach?

计算 Parallel.ForEach 使用的线程数

打破parallel.foreach?