0

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

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不是一个好主意,因为它会阻塞整个线程,并可能阻塞其他并行任务。

有没有可能有效的替代方案?

4

1 回答 1

4

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

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

如果您希望以 5 个块处理任务,然后再以 5 个块处理任务(例如,您希望串行处理块),那么您需要类似于

for(...)
{
   Parallel.ForEach(
      [paralleloptions,]
      set of 5, action
   )
}
于 2013-10-15T09:07:59.480 回答