我想同时探索一些地点。在并行循环之前的主线程中,我探索了第一个位置并且我有新的位置要探索(例如 50 个新位置)。但是我想探索 100 个位置(如果有这么多新位置),所以我必须更改循环的停止条件。
Parallel.For(1, Locations.Count, new ParallelOptions { MaxDegreeOfParallelism = 4 },
(index, state) =>
{
var newLocations = FindSomethingInLocation(Locations[index])
locationsInIndex(index, newLocations) // -> dictionary
if(Locations.Count < 100)
{
Locations.Add(newLocations)
}
}
我想探索 100 个位置并为每个探索的位置获取元素。
期间我该怎么做。有可能的?目前我正在按照上面的示例做一些事情,但是如果 Locations 在循环开始时有 50 个元素。循环将仅探索 50 个位置,即使我使用新元素增加 Locations 列表,停止条件也没有改变。
也许有人对此解决方案有更好的想法?
还有一些其他的问题。你知道 Parallel.For 是如何安排迭代的吗?主线程是否在开始时将问题分为 N 线程?或者更动态地做 - 当线程完成一些迭代时,它会从主线程获得一些新工作?
谢谢你们!