我想等待兩個任務完成,但未完成狀態。 任務都處於取消狀態時,等待應該結束。任務取消
當激活cancellationToken後,taskA和taskB將被canceld時,這條線是否會繼續?
Task.WaitAll(taskA, taskB);
在此先感謝。
我想等待兩個任務完成,但未完成狀態。 任務都處於取消狀態時,等待應該結束。任務取消
當激活cancellationToken後,taskA和taskB將被canceld時,這條線是否會繼續?
Task.WaitAll(taskA, taskB);
在此先感謝。
是的,WaitAll
將在兩個任務都處於終端狀態時退出,無論終端狀態如何。
但是,如果任何任務出現故障或取消,它將通過拋出AggregateException
來完成。如果所有任務都成功完成,它只會完成,通常爲(即無例外)。如果你只是想繼續前進,你需要捕捉這個異常。您可以查看AggregateException
的InnerExceptions
以瞭解取消和錯誤之間的區別 - 或者當然,請看taskA
和taskB
自己。
從documentation,在例外部分:
AggregateException任務實例至少有一個被取消 - 或者一個異常被任務實例中的至少一個的執行過程中拋出。如果任務被取消,則AggregateException在其InnerExceptions集合中包含OperationCanceledException。
請注意,如果你使用.NET 4.5和異步方法,您可能需要使用Task.WhenAll
相反,執行此等待異步 - 它返回時,原來的任務已經完成,其完成的任務。