亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過在 Register 回調中調用 ThrowIfCancellationRequested

通過在 Register 回調中調用 ThrowIfCancellationRequested

C#
蝴蝶刀刀 2023-09-24 10:53:25
我正在嘗試遷移到使用 .NET 中的 CancellationToken/Src 構造,例如:https: //learn.microsoft.com/en-us/dotnet/standard/threading/cancellation-in-management-threads我的基本問題是關于對取消請求做出反應。就我而言,我有一些長時間運行的處理,這對于一致性并不重要。當取消請求到達時,我無法承受“輪詢”的模式,例如:        while (!_token.IsCancellationRequested)        {            DoProcessing(...)        }因為處理過程可能需要幾分鐘,而我真的想立即退出。我的問題是,正確的方法是否是簡單地使用此設置:    public void Start()    {        _token.Register(() => _token.ThrowIfCancellationRequested());        // Continuously process stuff.        while (!_token.IsCancellationRequested)        {            DoProcessing(...)        }    }也就是說,注冊一個回調,該回調只會拋出 OperationCanceledException。我可以在這里閱讀:https://learn.microsoft.com/en-us/dotnet/api/system.threading.cancellationtokensource.cancel?view=netframework-4.8,即:我們建議使用 CancellationToken 注冊的可取消操作和回調不要拋出異常。然而...立即中斷我的處理(而不是輪詢)并仍然遵守框架規定的“規則”的正確方法是什么?
查看完整描述

1 回答

?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

我可以理解這句話似乎建議不要使用ThrowIfCancellationRequested,但事實并非如此——使用ThrowIfCancellationRequested是合適的。

有幾個來源表明使用ThrowIfCancellationRequested是合適的:

ThrowIfCancellationRequested表明這是正確的方法。

拋出OperationCanceledException是 TPL 中表達“您調用的方法被取消”的慣用方式。不要反對它——只是期待它。

Microsoft 的此消息?表明這ThrowIfCancellationRequested是正確的方法。

成功取消涉及請求代碼調用 CancellationTokenSource.Cancel 方法,以及用戶委托及時終止操作。您可以使用以下選項之一終止操作:

  • 只需從委托返回即可[剪掉該項目符號的其余部分]

  • 通過拋出 OperationCanceledException 并向其傳遞請求取消的令牌。執行此操作的首選方法是使用 ThrowIfCancellationRequested 方法。以這種方式取消的任務將轉換為已取消狀態,調用代碼可以使用該狀態來驗證任務是否響應了其取消請求

還有一個代碼示例演示如何ThrowIfCancellationRequested正確使用。

進一步閱讀此 Microsoft 源代碼的另一句話:

當任務實例觀察到用戶代碼引發的 OperationCanceledException 時...任務會將其解釋為確認取消并轉換到“已取消”狀態。

...

另請注意,其他異常的存在也會導致任務轉換到Faulted狀態......

  • 我懷疑(這只是我試圖協調兩個來源)這就是您引用的建議所指的內容——這是一個避免破壞取消機制準確指示任務狀態為已取消或故障的能力的建議


查看完整回答
反對 回復 2023-09-24
  • 1 回答
  • 0 關注
  • 141 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號