请问是否有最简单的实现方式。
解决方案:
方案一.
你可以使用 WhenAll,它返回的是一个可等待的 Task 类,你也可以使用 WaitAll,它没有返回值,但可以实现类似 Thread.Sleep 式的阻塞,直到所有的 tasks 完成,取消或者失败。会直接抛出 AggregateException 异常。
会抛出 AggregateException 异常,内部的异常类型是 OperationCanceledException。
var tasks = new Task[] { TaskOperationOne(), TaskOperationTwo() }; Task.WaitAll(tasks); // or await Task.WhenAll(tasks);
List<Task> TaskList = new List<Task>(); foreach(...) { var LastTask = new Task(SomeFunction); LastTask.Start(); TaskList.Add(LastTask); } Task.WaitAll(TaskList.ToArray());当然你也可以用 async + await 再配 WhenAll 来实现完全异步,参考如下代码:
var cats = new List<Cat>(); var dog = new Dog(); var loadDataTasks = new Task[] { Task.Run(async () => cats = await LoadCatsAsync()), Task.Run(async () => dog = await LoadDogAsync()) }; try { await Task.WhenAll(loadDataTasks); } catch (Exception ex) { // handle exception }总结: