簡體   English   中英

CancellationTokenSource.Cancel方法請求取消的任務可以忽略

[英]CancellationTokenSource.Cancel Method Can be ignored by the task cancellation is requested

所以我在書中讀到,即使我在令牌上調用cancel,我已將CancellationTokenSource傳遞給的任務也可以忽略它? 什么? 這是真的。 我希望不是。 在MSDN中找不到任何確定的內容。

這完全使取消令牌對我無用,然后我會堅持使用我的thread.abort。

是的,它是真的。 要使用CancellationTokenSource,您的任務必須知道它。

例如,以下代碼知道CancellationToken,因為它調用了令牌實例的ThrowIfCancellationRequested()方法:

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

在這個問題中,我已經找到了上述代碼片段以及對其的一些說明。

是。 文檔中所述CancellationToken用於合作取消。

任務中的代碼決定如何處理已請求取消的信息。 它可以忽略它,也可以等待適當的時間點並在請求取消的情況下拋出OperationCanceledException 提供了一個可以完全做到這一點的輔助方法:

CancellationToken.ThrowIfCancellationRequested()

這比僅殺死一個線程要好得多(盡管順便說一句, Task != Thread )。 看到這個問題的原因有很多,為什么Thread.Abort是一個壞主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM