在等待任务中,您是否必须编写自己的代码来对取消做出反应?

本文关键字:取消 代码 自己的 任务 是否 在等待 | 更新日期: 2023-09-27 18:16:39

除了cancelToken.ThrowIfCancellationRequested(),我的印象是c#异步基础结构将尝试中止任务,如果这里的行引号被调用,它将在继续尝试中止任务的其余部分之前抛出OperationCanceledException

有人在另一个问题上建议我必须自己写代码,就像我听一个取消的while(true)循环。好像所有的任务都意味着永远运行,如果不取消。

请确认我不需要"捕捉"令牌的取消,并且运行时将处理这个问题,因为该方法被标记为'async'。

在等待任务中,您是否必须编写自己的代码来对取消做出反应?

托管线程取消:

.NET框架使用统一的协作式取消异步或长时间运行的…

(我的重点)。

这不是旧的,不可靠的,从运行代码下拔出线程,不知道发生了什么Thread.Abort模型。必须在认为可以安全取消的时候,将代码编写为处理取消。这意味着在这些时间检查取消令牌或调用ThrowIfCancellationRequested,以尊重取消请求。


如果您的代码将取消令牌传递到另一个代码块,则不必编写任何额外的代码,并且该代码块是耗时的,并且已经编写为尊重取消令牌-当它抛出OperationCancelledException时,这也足以结束您的操作,前提是您不试图捕获或以其他方式处理该异常。