任务取消

本文关键字:取消 任务 | 更新日期: 2023-09-27 18:12:05

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

激活cancellationToken后,当taskA和taskB被取消时,这一行会继续吗?

Task.WaitAll(taskA, taskB); 

任务取消

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

但是,如果任何任务出错或取消,它将通过抛出AggregateException来完成。只有当所有任务都成功完成时,它才会正常完成(即没有异常)。如果您只是想继续运行,则需要捕获该异常。你可以看看AggregateExceptionInnerExceptions来分辨抵消和故障之间的区别——当然也可以看看taskAtaskB本身。

从文档中,在exceptions部分:

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

注意,如果你正在使用。net 4.5和异步方法,你可能想要使用Task.WhenAll来代替,它异步执行等待-它返回一个任务,当原始任务完成时完成。