代码之家  ›  专栏  ›  技术社区  ›  Jeff Meatball Yang

使用.NET 4.0中的任务并行库等待所有任务完成

  •  4
  • Jeff Meatball Yang  · 技术社区  · 15 年前

    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.
    
    1 回复  |  直到 15 年前
        1
  •  12
  •   Henk Holterman    12 年前

    如果你更换 for() 循环 Parallel.For() Parallel.ForEach() 你不需要任务清单什么的。我不知道你为什么要在ForEach后面加一个.WaitAll(),这似乎根本没有必要。

    所有任务完成后,并行循环停止。