【发布时间】:2021-01-20 02:44:18
【问题描述】:
我有一个针对每个 REST API 请求的 .NET 核心依赖项。它通过调用AddScoped 添加到Startup.ConfigureServices。
我想为此添加取消支持。如果我将CancellationToken cancellationToken 添加到任何控制器操作的参数中,我可以获得一个令牌,如果客户端请求是,则该令牌会被取消。然后我可以将该令牌传递给我的依赖项上的所有方法。
但是,依赖项的范围是请求,因此通过操作将令牌向下传递给方法是不必要的 - 我可以以某种方式将 CancellationToken 添加到范围依赖项中吗?
【问题讨论】:
-
@Métoule 可能,尽管这个问题似乎是在询问一般情况(即瞬态和静态范围),我认为这可能意味着它无法完成。我特别要求更窄的
AddScoped案例 - 我注入的依赖项存在于与取消令牌适用的完全相同的范围内。 -
没有必要。取消令牌用于提前取消正在进行的操作(即长时间运行的循环))并且独立于范围,因此尽快停止请求并释放请求可能仍然有用。请求可能因多种原因被取消,例如连接丢失、用户不小心在浏览器中连续两次单击链接或在页面加载时按 ESC
-
@Tseng 是的,并且可能存在需要为特定范围传递取消令牌的用例。但是,这里的连接丢失、用户重复或中止请求都在同一个范围内——这些与 .NET 没有不同的标记,它们都是 HTTP 取消,在操作上看起来是一样的。范围是相同的。
标签: c# asp.net-core .net-core dependency-injection request-cancelling