.NET Core使用 CancellationToken 取消API请求

💡 原文中文,约2400字,阅读约需6分钟。
📝

内容提要

ASP.NET Core 提供了一种称为 CancellationToken 的机制来处理长时间运行的任务并取消不必要的请求。通过将 CancellationToken 注入操作方法,当用户取消或刷新页面时,可以取消请求。这对于管理业务状态变化或停止耗费资源的操作非常有用。此外,您可以使用过滤器来捕获和处理 OperationCanceledException。

🔎

延伸解读

取消请求对业务状态的影响

文章指出,是否取消请求取决于操作是否修改业务状态。如果请求会修改业务状态,中途停止可能导致数据不一致,因此可能不希望取消;如果请求没有副作用,则取消可以避免浪费资源。开发者需要根据具体场景权衡,不能一概而论。

使用 CancellationToken 的实践要点

通过将 CancellationToken 注入操作方法,并传递给异步任务(如 Task.Delay),可以在用户取消请求时及时停止操作。文章示例显示,未使用 CancellationToken 时,即使刷新页面,服务器仍会完成执行;使用后,原始请求会中止,避免不必要的计算。

统一处理取消异常

当请求被取消时,会抛出 OperationCanceledException 并通过管道传播。文章建议使用异常过滤器(如 OperationCancelledExceptionFilter)统一捕获并记录日志,返回 400 状态码,避免在每个操作方法中重复 try-catch。

❓

Q&A

CancellationToken 在 ASP.NET Core 中的作用是什么?

CancellationToken 用于处理长时间运行的任务并取消不必要的请求。

用户如何取消正在进行的 API 请求?

用户可以通过刷新页面来取消请求,服务器无法知道原始请求将被丢弃。

如何在 API 操作中使用 CancellationToken?

可以通过将 CancellationToken 注入操作方法,并在任务中使用它来取消不必要的操作。

如果请求修改了业务状态,是否应该中途停止执行?

如果请求修改业务状态,可能不希望中途停止执行;如果没有副作用,则希望尽快停止操作。

如何处理 OperationCanceledException 异常?

可以通过 try catch 捕获异常,或使用过滤器统一监视 OperationCanceledException。

如何创建一个过滤器来处理请求取消的情况?

可以创建一个 OperationCancelledExceptionFilter 过滤器,捕获请求取消并记录日志。

🏷️

标签

➡️

继续阅读