[英]Under what circumstances should an Async method support cancellation
我目前正在構建現有API的異步啟用版本,我很難找到關於何時支持取消的好主意的任何指導。 BCL中的一些Async方法沒有接受CancellationToken
的重載,我發現了這篇MSDN文章
並非所有異步方法都支持取消
那么,有什么條件可以通過CancellationToken
支持CancellationToken
?
我傾向於以下條件:
那些合理的條件嗎? 還有其他人嗎?
這只是我的意見,但我會說,如果你所謂的async
方法都支持取消,那么你應該。 與此類似,如果您正在通過自然異步操作創建await
API,那么請盡力支持取消(例如,通過CancellationToken.Register
)。
我還說任何(同步)CPU綁定方法可能需要“長時間”應該定期觀察取消令牌( CancellationToken.ThrowIfCancellationRequested
)。 “長時間”是相對的,但作為一個粗略的指導,我會說超過半秒鍾(在較舊的硬件上,而不是我們的8核開發機器;)。
在任何其他情況下,您談論的是一種不太有用的取消形式 - 具體而言,取消可能需要任意時間才能生效。 例如,如果某些async
方法支持它,但其他方法不支持。 我不確定在這種情況下取消令牌參數會有多大用處; 你可能想把它放進去,但一定要記錄它的局限性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.