我想等到两个任务完成,但不是完成状态。当两个任务都处于取消状态时,等待应该结束。
激活cancellationToken后taskA和taskB将被取消时,这条线会继续吗?
Task.WaitAll(taskA, taskB);
提前致谢。
我想等到两个任务完成,但不是完成状态。当两个任务都处于取消状态时,等待应该结束。
激活cancellationToken后taskA和taskB将被取消时,这条线会继续吗?
Task.WaitAll(taskA, taskB);
提前致谢。
是的,WaitAll
当两个任务都处于终端状态时将退出,无论该终端状态是什么。
AggregateException
但是,如果任何任务出现故障或取消,它将通过抛出一个来完成。如果所有任务都成功完成,它只会正常完成(即没有例外)。如果您只想继续前进,则需要捕获该异常。您可以查看InnerExceptions
的AggregateException
来区分取消和故障 - 当然,也可以查看taskA
它们taskB
本身。
从文档中,在异常部分:
AggregateException至少有一个 Task 实例被取消 - 或 - 在至少一个 Task 实例的执行过程中引发了异常。如果任务被取消,则 AggregateException 在其 InnerExceptions 集合中包含一个 OperationCanceledException。
请注意,如果您使用的是 .NET 4.5 和异步方法,您可能希望使用Task.WhenAll
它来异步执行此等待 - 它返回一个在原始任务完成时完成的任务。