task介紹

注意:

我們知道task是並行計算的,比如說主線程在某個時刻由於某種原因要取消某個task的執行,我們能做到嗎? 當然我們可以做到。 
在4.0中給我們提供一個“取消標記”叫做CancellationTokenSource.Token,在創建task的時候傳入此參數,就可以將主線程和任務相關聯,然後在任務中設置“取消信號“叫做ThrowIfCancellationRequested來等待主線程使用Cancel來通知,一旦cancel被調用。task將會拋出OperationCanceledException來中斷此任務的執行,最後將當前task的Status的IsCanceled屬性設爲true。 
注意:一定要處理這個異常,可以通過調用Task.Result成員來獲取這個異常。如果一直不查詢Task的Exception屬性。你的代碼就永遠注意不到這個異常的發生,如果不能捕捉到這個異常,垃圾回收時,拋出AggregateException,進程就會立即終止,這就是“牽一髮動全身”,莫名其妙程序就自己關掉了,誰也不知道這是什麼情況。所以,必須調用前面提到的某個成員,確保代碼注意到異常,並從異常中恢復。因此可以將條用Task的某個成員來檢查Task是否跑出了異常,通常調用Task的Result。下面看代碼:
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章