Parallel.Foreach会阻塞直到它完成吗?

时间:2013-11-22 14:45:54

标签: c# asp.net

如果我的代码与此相似:

foreach (Item child in item.Children)
{
     // Do stuff
     ParallelOptions options = new ParallelOptions();
     options.MaxDegreeOfParallelism = 3;
     Parallel.ForEach(items, i => DoStuff());
}

在继续使用下一个foreach项目之前,Parallel.Foreach是否会完成所有项目?

2 个答案:

答案 0 :(得分:5)

是 - Parallel.ForEach将阻止。这是一种同步方法,它在内部并行工作。

答案 1 :(得分:1)

我已经采用了一种稍微奇怪的方式来展示下面所需的属性,因为我找不到文档中的任何好的摘录。 Parallel.ForEach刚出来并声明循环在方法返回之前完成:


是。请注意,Parallel.Foreach的返回类型为ParallelLoopResult,其中包含的信息只有在所有操作完成后才可用,例如IsCompleted

  

获取循环是否运行完成,以便循环的所有迭代都被执行并且循环没有收到过早结束的请求。

ParallelLoopResultstruct - 因此从Parallel.ForEach返回的任何值都不能在从该方法返回后更改。