2015-10-05 80 views

回答

1

是的,的確如此。要使用CancellationTokenSource,您的任務必須注意它。

例如,下面的代碼是知道的CancellationToken的,因爲它調用ThrowIfCancellationRequested令牌實例的()方法:

var cts = new CancellationTokenSource(); 
SomeCancellableOperation(cts.Token); 
... 
public void SomeCancellableOperation(CancellationToken token) { 
    ... 
    token.ThrowIfCancellationRequested(); 
    ... 
} 

我已經發現上述的代碼片段和關於它的一些in this question澄清。

1

是的。正如它說的in the documentation,CancellationToken是爲合作取消。

任務內的代碼決定如何處理已請求取消的信息。它可以忽略它,或者它可以等待適當的點,並且如果已經請求了取消,則拋出OperationCanceledException。有規定,正是這樣做的一個輔助方法:

CancellationToken.ThrowIfCancellationRequested() 

這是遠遠優於剛殺死一個線程(不過,順便說一句,Task != Thread)。看到this question爲什麼Thread.Abort是一個壞主意的一堆原因。