Parallel.ForEach中的C#延迟

时间:2013-10-15 08:58:51

标签: c# multithreading task-parallel-library

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

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

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

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

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

是否有替代方案可行?

1 个答案:

答案 0 :(得分:4)

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

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

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

的代码
for(...)
{
   Parallel.ForEach(
      [paralleloptions,]
      set of 5, action
   )
}