2013-05-05 92 views
1

我想等待兩個任務完成,但未完成狀態。 任務都處於取消狀態時,等待應該結束。任務取消

當激活cancellationToken後,taskA和taskB將被canceld時,這條線是否會繼續?

Task.WaitAll(taskA, taskB); 

在此先感謝。

回答

4

是的,WaitAll將在兩個任務都處於終端狀態時退出,無論終端狀態如何。

但是,如果任何任務出現故障或取消,它將通過拋出AggregateException來完成。如果所有任務都成功完成,它只會完成,通常爲(即無例外)。如果你只是想繼續前進,你需要捕捉這個異常。您可以查看AggregateExceptionInnerExceptions以瞭解取消和錯誤之間的區別 - 或者當然,請看taskAtaskB自己。

documentation,在例外部分:

AggregateException任務實例至少有一個被取消 - 或者一個異常被任務實例中的至少一個的執行過程中拋出。如果任務被取消,則AggregateException在其InnerExceptions集合中包含OperationCanceledException。

請注意,如果你使用.NET 4.5和異步方法,您可能需要使用Task.WhenAll相反,執行此等待異步 - 它返回時,原來的任務已經完成,其完成的任務。