我想等到两个任务完成,但不是处于已完成状态。当两个任务都处于取消状态时,等待应该结束。
开通cancellationToken后取消taskA和taskB,这行还会继续吗?
Task.WaitAll(taskA, taskB); 提前谢谢。
发布于 2013-05-05 15:13:13
是的,当两个任务都处于终止状态时,无论该终止状态是什么,WaitAll都将退出。
但是,如果有任何任务出错或被取消,它将通过抛出AggregateException来完成。只有在所有任务都成功完成的情况下,它才会正常完成(即没有异常)。如果你只是想继续下去,你就需要捕捉这个异常。您可以查看AggregateException的InnerExceptions来区分取消和故障-当然,也可以查看taskA和taskB本身。
在documentation的exceptions部分中:
AggregateException至少有一个任务实例被取消-或者-在执行至少一个任务实例的过程中引发异常。如果任务已取消,则AggregateException的InnerExceptions集合中包含一个OperationCanceledException。
请注意,如果您使用的是.NET 4.5和异步方法,您可能希望使用Task.WhenAll,它异步执行等待-它返回一个任务,该任务在原始任务完成时完成。
https://stackoverflow.com/questions/16382238
复制相似问题