1. 程式人生 > >CLR via C# 筆記 ----Task(任務) 2

CLR via C# 筆記 ----Task(任務) 2

Task的取消

CancellationTokenSource用來取消Task,可以為Task的建構函式傳遞一個此類的例項。

當呼叫例項的cancel方法時,Task會被提意取消

為何說是提意,因為取消是協作式的,也就是說你這邊提意了,Task的工作函式裡還必須顯示的寫一點響應邏輯才能真正的取消執行。在工作函式內部,通常在一個迴圈內,持續呼叫CancellationTokenSource例項的token的ThrowIfCancellationRequested()方法來確實的執行任務的取消。而工作函式中的source例項 需要通過引數傳遞,或者lamda捕捉。

在獲取結果的程式碼裡可以捕捉到這個異常,從而知曉任務被取消了

另外,如果一個任務還沒有開始,就呼叫了和他關聯的tokenSource的cancel的話 任務會被標記為已經完成(Result會丟擲異常)