如果我的代码与此相似:
foreach (Item child in item.Children)
{
// Do stuff
ParallelOptions options = new ParallelOptions();
options.MaxDegreeOfParallelism = 3;
Parallel.ForEach(items, i => DoStuff());
}
在继续使用下一个foreach项目之前,Parallel.Foreach是否会完成所有项目?
答案 0 :(得分:5)
是 - Parallel.ForEach将阻止。这是一种同步方法,它在内部并行工作。
答案 1 :(得分:1)
我已经采用了一种稍微奇怪的方式来展示下面所需的属性,因为我找不到文档中的任何好的摘录。 Parallel.ForEach
刚出来并声明循环在方法返回之前完成:
是。请注意,Parallel.Foreach
的返回类型为ParallelLoopResult
,其中包含的信息只有在所有操作完成后才可用,例如IsCompleted
:
获取循环是否运行完成,以便循环的所有迭代都被执行并且循环没有收到过早结束的请求。
ParallelLoopResult
是struct
- 因此从Parallel.ForEach
返回的任何值都不能在从该方法返回后更改。