1 回答

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊
我可以理解這句話似乎建議不要使用ThrowIfCancellationRequested
,但事實(shí)并非如此——使用ThrowIfCancellationRequested
是合適的。
有幾個(gè)來源表明使用ThrowIfCancellationRequested
是合適的:
ThrowIfCancellationRequested
表明這是正確的方法。
拋出
OperationCanceledException
是 TPL 中表達(dá)“您調(diào)用的方法被取消”的慣用方式。不要反對(duì)它——只是期待它。
Microsoft 的此消息?表明這ThrowIfCancellationRequested
是正確的方法。
成功取消涉及請(qǐng)求代碼調(diào)用 CancellationTokenSource.Cancel 方法,以及用戶委托及時(shí)終止操作。您可以使用以下選項(xiàng)之一終止操作:
只需從委托返回即可[剪掉該項(xiàng)目符號(hào)的其余部分]
通過拋出 OperationCanceledException 并向其傳遞請(qǐng)求取消的令牌。執(zhí)行此操作的首選方法是使用 ThrowIfCancellationRequested 方法。以這種方式取消的任務(wù)將轉(zhuǎn)換為已取消狀態(tài),調(diào)用代碼可以使用該狀態(tài)來驗(yàn)證任務(wù)是否響應(yīng)了其取消請(qǐng)求
還有一個(gè)代碼示例演示如何ThrowIfCancellationRequested
正確使用。
進(jìn)一步閱讀此 Microsoft 源代碼的另一句話:
當(dāng)任務(wù)實(shí)例觀察到用戶代碼引發(fā)的 OperationCanceledException 時(shí)...任務(wù)會(huì)將其解釋為確認(rèn)取消并轉(zhuǎn)換到“已取消”狀態(tài)。
...
另請(qǐng)注意,其他異常的存在也會(huì)導(dǎo)致任務(wù)轉(zhuǎn)換到Faulted狀態(tài)......
我懷疑(這只是我試圖協(xié)調(diào)兩個(gè)來源)這就是您引用的建議所指的內(nèi)容——這是一個(gè)避免破壞取消機(jī)制準(zhǔn)確指示任務(wù)狀態(tài)為已取消或故障的能力的建議
- 1 回答
- 0 關(guān)注
- 157 瀏覽
添加回答
舉報(bào)