【发布时间】:2014-05-12 11:59:43
【问题描述】:
我有一个 Parallel.ForEach 循环做一些处理。但是第一个操作是在不包含键的情况下在字典中添加一个值。添加它时出现错误,它说密钥已经在字典中。我猜想密钥是在 .Contains 检查这个线程之后由并行进程添加的,但在添加之前。除了将该行放在 try-catch 中之外,还有其他简单的解决方案可以用来防止该错误吗?
Parallel.ForEach(branchFixes, b =>
{
Parallel.ForEach(b.Value, t =>
{
var team = t.Key;
if (!resultTeamDict.ContainsKey(team))
{
resultTeamDict.Add(team, new Dictionary<FixItem, Dictionary<BranchInfo, bool>>());
}
});
});
【问题讨论】:
-
@mellamokb:这不是真的——如果你有多个内核可用,你为什么不想使用它们呢?它只有在问题自然可并行的情况下才有效,但“CPU 密集型”意味着“并行变慢”的想法是无稽之谈。
-
@JonSkeet:是的,你是对的。我在考虑单核。
标签: c# dictionary parallel.foreach