gpt4 book ai didi

c# - 使用 CancellationToke 添加作用域依赖项

转载 作者:行者123 更新时间:2023-12-03 08:34:50 25 4
gpt4 key购买 nike

我有一个 .NET 核心依赖项,其范围仅限于每个 REST API 请求。它通过调用 AddScoped 添加到 Startup.ConfigureServices 中。

我想为此添加取消支持。如果我将 CancellationToken CancellationToken 添加到任何 Controller 操作的参数中,我可以获得一个在客户端请求被取消时被取消的 token 。然后我可以将该 token 传递给我的依赖项上的所有方法。

但是,依赖项的范围仅限于请求,因此通过操作将 token 传递给方法感觉没有必要 - 我可以以某种方式将 CancellationToken 添加到范围依赖项吗?

最佳答案

could I just add the CancellationToken to the scoped dependency somehow?

嗯,从技术上来说是的。即通过注入(inject) IHttpAccessor并访问HttpContext.RequestAborted属性,它与您通常传递到 Controller 操作(如果已定义)的取消标记相同。

但是使用操作参数重载实际上有点不鼓励,因为在每个 Controller 操作中,您都可以通过 HttpContext.RequestAborted 访问取消 token 将其放在 Controller 操作中会使 token 公开,即在创建 Swagger 方案时(至少是 2017 年的情况),其中使用 HttpContext本身并没有向公众公开。

唯一的异常(exception)似乎是,当使用不继承自 Controller 的“Poco Controller ”时或ControllerBase并且不注入(inject)IHttpAccessor进入这个 Controller 。

但是,将取消 token 注入(inject)任意服务是有问题的,因为您对 Web 框架有严格的依赖性 ( IHttpAccessor/HttpContext )。

保持 CancellationToken 是最好、最干净的。方法上的参数可以以有意义的方式取消,并使 token 可选,因此您只能在有请求或可以取消的情况下传递参数

public Task<Result> ProcessSomething(string param1, CancellationToken cancellationToken = default)
{
}

关于c# - 使用 CancellationToke 添加作用域依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64205147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com