Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在并联For循环期间更改停止条件_C#_List_Parallel Processing_Parallel.for - Fatal编程技术网

C# 在并联For循环期间更改停止条件

C# 在并联For循环期间更改停止条件,c#,list,parallel-processing,parallel.for,C#,List,Parallel Processing,Parallel.for,我想同时探索一些地方。在并行循环之前的主线程中,我探索了第一个位置,我有新的位置要探索(例如50个新位置)。但我想探索100个位置(若有这么多新的位置),所以我必须改变循环的停止条件 Parallel.For(1, Locations.Count, new ParallelOptions { MaxDegreeOfParallelism = 4 }, (index, state) => { var newLocations = FindSomethin

我想同时探索一些地方。在并行循环之前的主线程中,我探索了第一个位置,我有新的位置要探索(例如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)
          }

    }
Parallel.For(1,Locations.Count,新的ParallelOptions{maxdegreeofpparallelism=4},
(索引,状态)=>
{
var newLocations=findSomethingLocation(位置[索引])
locationsInIndex(索引,新位置)/->字典
如果(位置计数<100)
{
位置。添加(新位置)
}
}
我想探索100个地点,并获得每个地点的元素

在循环期间我如何才能做到这一点。这是可能的?目前我正在做如上示例所示的事情,但如果位置在循环开始时有50个元素。循环将只探索50个位置,即使我使用新元素增加位置列表,停止条件也不会改变

也许有人对这个解决方案有更好的想法

还有一些关于这个的问题。你们知道有多并行吗。对于调度迭代来说,是主线程在开始时将问题分成N个线程吗?还是更动态地进行?当线程完成一些迭代时,它从主线程获得一些新的工作


谢谢大家!

您不能更改该条件,因为数据集已被分区并分配给线程(尽管您可以导致其他线程停止执行)在最初的搜索完成后,我会考虑排队额外的工作。<代码>并行< /代码>只使用<代码>线程池< /Code >线程。谢谢你的答案。我已经改变了那个代码。我已经把并行循环移到了方法中。这种解决方案会在每次调用方法后使用并行循环同步线程,但在我的例子中,这种情况只会发生几次,而且因为每个线程都有类似的工作要做,所以同步成本不会太高。