是否有更短的方法等待多个线程完成?也许使用ContinueWhenAll ...但我不想将其余的代码运行为异步。
List<object> objList = // something
List<Task> taskHandles = new List<Task>();
for(int i = 0; i < objList.Count; i++) {
taskHandles.Add(Task.Factory.StartNew(() => { Process(objList[i]); }));
}
foreach(Task t in taskHandles) { t.Wait(); }
DoSomeSync1();
..
DoSomeSync2();
..
DoSomeSync3();
..
// I could have used ContinueWhenAll(waitHandles, (antecedent) => { DoSomeSync...; });
// but I'd rather not have to do that.
// It would be nice if I could have just done:
Parallel.ForEach(objList, (obj) => { Process(obj); }).WaitAll();
// or something like that.
答案 0 :(得分:12)
如果您将for()
循环替换为Parallel.For()
或Parallel.ForEach()
,则不需要任务列表或任何内容。我不确定为什么你会想要一个ForEach之后的.WaitAll(),甚至看起来都没有必要。
并行循环在所有任务完成后停止。