C#并行延迟。ForEach

C#并行延迟。ForEach,c#,multithreading,task-parallel-library,C#,Multithreading,Task Parallel Library,我使用2Parallel.ForEach嵌套循环从url快速检索信息。代码如下: while (searches.Count > 0) { Parallel.ForEach(searches, (search, loopState) => { Parallel.ForEach(search.items, item => { RetrieveInfo(item)

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


是否有其他可行方案?

据我所知,您有50项任务,希望一次处理其中5项

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

如果您希望将任务分为五个块进行处理,然后再处理另一个五个块(如中所示,您希望以串行方式处理块),那么您希望代码类似于

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

据我所知,您有50项任务,您希望一次处理其中5项

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

如果您希望将任务分为五个块进行处理,然后再处理另一个五个块(如中所示,您希望以串行方式处理块),那么您希望代码类似于

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

这太可怕了。你能解释一下延迟是什么意思吗?您希望内部循环在返回到外部循环之前等待吗?你知道他们是平行的是吗?如果那是你想要的。。使它们同步..我是否理解正确,内部循环中的5只是一个示例,与5个同步请求无关?这很可怕。你能解释一下延迟是什么意思吗?您希望内部循环在返回到外部循环之前等待吗?你知道他们是平行的是吗?如果那是你想要的。。使它们同步..我是否理解正确,内循环中的5只是一个示例,与5个同时请求无关?现在我还跟踪每个内循环所用的时间,在外循环完成后,我使用Thread.Sleep.who我们可以为每个任务增加延迟吗?也就是说,如果我们一次执行5个任务,那么我们如何为每个任务增加1秒的延迟,使每个任务在前一个任务的1秒后执行。现在我还要跟踪每个内循环和外循环完成后所花费的时间,我使用Thread.Sleep.who我们可以为每个任务增加延迟吗?也就是说,如果我们一次执行5个任务,我们如何为每个任务添加1秒的延迟,以便每个任务在前一个任务的1秒后执行。