Parallel.ForEach中的C#延迟

问题描述 投票:0回答:1

我使用2个Parallel.ForEach嵌套循环从网址快速检索信息。这是代码:

while (searches.Count > 0)
{
    Parallel.ForEach(searches, (search, loopState) =>
        {
            Parallel.ForEach(search.items, item =>
                {
                    RetrieveInfo(item);
                }
            );
        }
    );
}

外部ForEach有一个列表,例如10,而内部ForEach有一个列表5.这意味着我将查询url 50次,但我同时查询它5次(内部ForEach)。

我需要为内部循环添加延迟,以便在查询url之后,它等待x秒 - 内部循环完成5个请求所花费的时间。

使用Thread.Sleep不是一个好主意,因为它会阻塞整个线程,也可能阻止其他并行任务。

有没有可行的替代方案?

c# multithreading task-parallel-library
1个回答
4
投票

根据我的理解,您有50个任务,并且您希望一次处理其中的5个任务。

如果是这样,您应该查看ParallelOptions.MaxDegreeOfParallelism以在5处以最大并行度处理50个任务。当一个任务停止时,允许另一个任务启动。

如果您希望以五个块的形式处理任务,然后再处理另一个五个块(例如,您希望以串行方式处理块),那么您希望代码类似于

for(...)
{
   Parallel.ForEach(
      [paralleloptions,]
      set of 5, action
   )
}
© www.soinside.com 2019 - 2024. All rights reserved.