任务取消

时间:2013-05-05 07:09:14

标签: c# .net task-parallel-library

我想等到两个任务完成,但还没有完成状态。等待应该结束 任务都处于取消状态。

在激活cancelToken后,当taskA和taskB将被取消时,这一行是否会继续?

Task.WaitAll(taskA, taskB); 

提前致谢。

1 个答案:

答案 0 :(得分:4)

是的,WaitAll将在两个任务处于终端状态时退出,无论终端状态如何。

但是,如果任何任务出现故障或被取消,它将通过抛出AggregateException来完成。如果所有任务都成功完成,它将只完成正常(即没有例外)。如果你只是想继续前进,你需要抓住那个例外。您可以查看InnerExceptions的{​​{1}}来说明取消和错误之间的区别 - 当然也可以查看AggregateExceptiontaskA

来自documentation,例外部分:

  

AggregateException 至少有一个Task实例被取消 - 或者 - 在执行至少一个Task实例期间抛出了异常。如果任务被取消,则AggregateException在其InnerExceptions集合中包含OperationCanceledException。

请注意,如果您使用的是.NET 4.5和异步方法,则可能需要使用Task.WhenAll代替异步执行此操作 - 它会返回一个在原始任务完成时完成的任务。