所以我在書中看到,即使我調用取消令牌的任務,我已經通過CancellationTokenSource任務可以忽略它嗎?什麼?這是真的。我希望不是。 在MSDN中找不到任何明確的內容。CancellationTokenSource.Cancel方法可以忽略的任務取消請求
它完全使取消標記對我沒用,我會堅持我的thread.abort然後。
所以我在書中看到,即使我調用取消令牌的任務,我已經通過CancellationTokenSource任務可以忽略它嗎?什麼?這是真的。我希望不是。 在MSDN中找不到任何明確的內容。CancellationTokenSource.Cancel方法可以忽略的任務取消請求
它完全使取消標記對我沒用,我會堅持我的thread.abort然後。
是的,的確如此。要使用CancellationTokenSource,您的任務必須注意它。
例如,下面的代碼是知道的CancellationToken的,因爲它調用ThrowIfCancellationRequested令牌實例的()方法:
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts.Token);
...
public void SomeCancellableOperation(CancellationToken token) {
...
token.ThrowIfCancellationRequested();
...
}
我已經發現上述的代碼片段和關於它的一些in this question澄清。
是的。正如它說的in the documentation,CancellationToken
是爲合作取消。
任務內的代碼決定如何處理已請求取消的信息。它可以忽略它,或者它可以等待適當的點,並且如果已經請求了取消,則拋出OperationCanceledException
。有規定,正是這樣做的一個輔助方法:
CancellationToken.ThrowIfCancellationRequested()
這是遠遠優於剛殺死一個線程(不過,順便說一句,Task != Thread
)。看到this question爲什麼Thread.Abort
是一個壞主意的一堆原因。