我在.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个)。
我的问题是:
将商品添加到_linkRemoveIndices
或ConcurrentBag
正文中的Parallel.For
的正确方法是什么?