等待任务列表

我正在尝试做这样的事情:

foreach (var o in ObjectList) { CalculateIfNeedToMakeTaskForO(o); if (yes) TaskList.Add(OTaskAsync()); } 

现在我想等待所有这些任务完成。 除了做

 foreach(var o in ObjectList) { Result.Add("result for O is: "+await OTaskAsync()); } 

有什么我能做的吗? (更好,更优雅,更“正确”)

您正在寻找Task.WaitAll (假设您的TaskList实现了IEnumerable

 Task.WaitAll(TaskList.ToArray()); 

编辑:由于WaitAll只接受一个任务数组(或一个可变参数数组forms的Task列表),你必须转换你的Enumerable。 如果你想要一个扩展方法,你可以这样做:

 pulic static void WaitAll(this IEnumerable tasks) { Task.WaitAll(tasks.ToArray()); } TaskList.WaitAll(); 

但那真的只是语法糖。

您正在寻找Task.WhenAll

 var tasks = ObjectList .Where(o => CalculateIfNeedToMakeTaskForO(o)) .Select(o => OTaskAsync(o)) .ToArray(); var results = await Task.WhenAll(tasks); var combinedResults = results.Select(r => "result for O is: " + r);