1

我想等到两个任务完成,但不是完成状态。当两个任务都处于取消状态时,等待应该结束。

激活cancellationToken后taskA和taskB将被取消时,这条线会继续吗?

Task.WaitAll(taskA, taskB); 

提前致谢。

4

1 回答 1

4

是的,WaitAll当两个任务都处于终端状态时将退出,无论该终端状态是什么。

AggregateException但是,如果任何任务出现故障或取消,它将通过抛出一个来完成。如果所有任务都成功完成,它只会正常完成(即没有例外)。如果您只想继续前进,则需要捕获该异常。您可以查看InnerExceptionsAggregateException来区分取消和故障 - 当然,也可以查看taskA它们taskB本身。

文档中,在异常部分:

AggregateException至少有一个 Task 实例被取消 - 或 - 在至少一个 Task 实例的执行过程中引发了异常。如果任务被取消,则 AggregateException 在其 InnerExceptions 集合中包含一个 OperationCanceledException。

请注意,如果您使用的是 .NET 4.5 和异步方法,您可能希望使用Task.WhenAll它来异步执行此等待 - 它返回一个在原始任务完成时完成的任务。

于 2013-05-05T07:13:13.433 回答