为什么在ConcurrentBag上添加失败?

时间:2017-02-17 15:00:29

标签: c# parallel-processing

我在.net 4.5中使用并发和并行功能有点新,所以这可能是我的开发人员错误。

我正在尝试使用ConcurrentBag对名为_linkCandidates的{​​{1}}个线段进行数学交叉测试。

如果存在交集,则Parallel.ForEach元素中的整数id字段将添加到名为_linkCandidates的另一个ConcurrentBag

_linkRemoveIndices

我创建了一个单元测试,其结果已知,Parallel.ForEach(_linkCandidates, new ParallelOptions {MaxDegreeOfParallelism = 2}, link => { if (_gcIntersect.Intersect(link.Lat1, link.Lon1, link.Lat2, link.Lon2)) { lock (_linkRemoveIndices) { _linkRemoveIndices.Add(link.Ndx); } } } 的内容可能会被验证。

如果我通过设置_linkRemoveIndices以单线程方式运行代码,则单元测试通过,MaxDegreeOfParallelism = 1包含预期的ID(将_linkRemoveIndices添加约200个元素) 。

如果我使用_linkRemoveIndices或更多代码运行代码,MaxDegreeOfParallelism = 2不包含正确解决方案的所有整数ID(将少于20个)。

我的问题是:

将商品添加到_linkRemoveIndicesConcurrentBag正文中的Parallel.For的正确方法是什么?

0 个答案:

没有答案