我想等到两个任务完成,但还没有完成状态。等待应该结束 任务都处于取消状态。
在激活cancelToken后,当taskA和taskB将被取消时,这一行是否会继续?
Task.WaitAll(taskA, taskB);
提前致谢。
答案 0 :(得分:4)
是的,WaitAll
将在两个任务处于终端状态时退出,无论终端状态如何。
但是,如果任何任务出现故障或被取消,它将通过抛出AggregateException
来完成。如果所有任务都成功完成,它将只完成正常(即没有例外)。如果你只是想继续前进,你需要抓住那个例外。您可以查看InnerExceptions
的{{1}}来说明取消和错误之间的区别 - 当然也可以查看AggregateException
和taskA
。
来自documentation,例外部分:
AggregateException 至少有一个Task实例被取消 - 或者 - 在执行至少一个Task实例期间抛出了异常。如果任务被取消,则AggregateException在其InnerExceptions集合中包含OperationCanceledException。
请注意,如果您使用的是.NET 4.5和异步方法,则可能需要使用Task.WhenAll
代替异步执行此操作 - 它会返回一个在原始任务完成时完成的任务。