任务取消
本文关键字:取消 任务 | 更新日期: 2023-09-27 18:12:05
我想等到两个任务完成,但不是在完成状态。等待应该在什么时候结束两个任务都处于取消状态。
激活cancellationToken后,当taskA和taskB被取消时,这一行会继续吗?
Task.WaitAll(taskA, taskB);
是的,WaitAll
将在两个任务都处于终端状态时退出,无论该终端状态是什么
但是,如果任何任务出错或取消,它将通过抛出AggregateException
来完成。只有当所有任务都成功完成时,它才会正常完成(即没有异常)。如果您只是想继续运行,则需要捕获该异常。你可以看看AggregateException
的InnerExceptions
来分辨抵消和故障之间的区别——当然也可以看看taskA
和taskB
本身。
从文档中,在exceptions部分:
AggregateException至少一个Task实例被取消-或者-在执行至少一个Task实例期间抛出异常。如果任务被取消,AggregateException在其InnerExceptions集合中包含OperationCanceledException。
注意,如果你正在使用。net 4.5和异步方法,你可能想要使用Task.WhenAll
来代替,它异步执行等待-它返回一个任务,当原始任务完成时完成。