我使用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
不是一个好主意,因为它会阻塞整个线程,也可能阻止其他并行任务。
有没有可行的替代方案?
根据我的理解,您有50个任务,并且您希望一次处理其中的5个任务。
如果是这样,您应该查看ParallelOptions.MaxDegreeOfParallelism以在5处以最大并行度处理50个任务。当一个任务停止时,允许另一个任务启动。
如果您希望以五个块的形式处理任务,然后再处理另一个五个块(例如,您希望以串行方式处理块),那么您希望代码类似于
for(...)
{
Parallel.ForEach(
[paralleloptions,]
set of 5, action
)
}