等到所有工人都完成

时间:2016-07-13 11:20:55

标签: c# task

所以我有这样的流程:

  1. 创建x工作人员任务
  2. 做一些事情
  3. 等到所有工作任务完成
  4. 继续
  5. 我写了这段代码:

    List<Task> workerTasks = new List<Task>();
    
    foreach (Worker worker in workers)
    {
        Task task = Task.Factory.StartNew(() => 
        {
            worker.Start();
            worker.Dispose();
        });
    
        workerTasks.Add(task);
    }
    
    // Do some work here
    
    // Wait for unfinished workers
    while (workerTasks.Where(t => !t.IsCompleted).Count() > 0) { }
    
    // Proceed
    

    虽然这段代码到目前为止有用,但我觉得这不是一个好习惯。 你能给我一些如何以更好的方式解决这个问题的技巧吗?谢谢!

1 个答案:

答案 0 :(得分:2)

您可以改为使用Task.WaitAll()

Task.WaitAll(workerTasks.ToArray() );

或者对于异步方法:

await Task.WhenAll(workerTasks.ToArray());

或者将任务返回给调用者:

return Task.WhenAll(workerTasks.ToArray());