平行的.Foreach和字典集合

本文关键字:字典 集合 Foreach | 更新日期: 2023-09-27 18:02:22

我不明白我的代码是怎么出错的,这里有一段代码:

var filter=new dictionary<string,dictionary<string,bool>>();
//data here is of type dictionary<string,bool>
Parallel.Foreach(data,t=>
{
 var filter1=data.Where(p=>p.Value).ToDictionary(p=>p.Key,p=>p.Value);
 filter.Add(t.key,filter1);
});

有时,最后的过滤器中有一个空键,如果我使用一个简单的for循环,就不会发生这种情况。

平行的.Foreach和字典集合

如果我使用了一个简单的for循环,

[this]就不会发生。

问题是您正在并发地添加filter。您可以通过使用AsParallel():

来修复此问题。
var filter = data.AsParallel().ToDictionary(t =>
    t.Key
,   data.Where(p=>p.Value).ToDictionary(p=>p.Key, p=>p.Value)
);