Asp.net core ASP.NET核心用户管理器中的取消

Asp.net core ASP.NET核心用户管理器中的取消,asp.net-core,cancellation,asp.net-core-3.0,cancellation-token,Asp.net Core,Cancellation,Asp.net Core 3.0,Cancellation Token,我目前正在基于Asp.Net核心标识的UserManager的设计实现一些服务。 在实现中,我想知道如果无法将取消令牌传递到usermanager的方法中,usermanager如何支持取消 我还看到usermanager内部有一个取消令牌属性(具有默认值),它在内部使用,并将传递给使用的异步方法。但由于其保护级别,此属性不可访问 protected virtual CancellationToken CancellationToken => CancellationToken.None;

我目前正在基于Asp.Net核心标识的UserManager的设计实现一些服务。 在实现中,我想知道如果无法将取消令牌传递到usermanager的方法中,usermanager如何支持取消

我还看到usermanager内部有一个取消令牌属性(具有默认值),它在内部使用,并将传递给使用的异步方法。但由于其保护级别,此属性不可访问

protected virtual CancellationToken CancellationToken => CancellationToken.None;
我如何将我在控制器中使用的取消令牌(例如)传递给用户管理器?我必须重载它并通过新方法将其传递到它吗

public class MyUserManager : UserManager<MyUser>
{
    /* ... Other stuff... */

    protected override CancellationToken CancellationToken  {get;set;}

    public void SetCancellationToken(CancellationToken cancellationToken)
    {
         this.CancellationToken = cancellationToken;
    }

}
公共类MyUserManager:UserManager { /*…其他东西*/ 受保护的覆盖取消令牌取消令牌{get;set;} 公共无效SetCancellationToken(CancellationToken CancellationToken) { this.CancellationToken=CancellationToken; } }
这是使用userManager完成取消的正确方法吗?如果是:为什么这与使用CancellationToken的其他组件不同,比如EF Core,您必须通过方法参数传递CancellationToken

UserManager
在内部处理取消,并从
HttpContext.RequestAborted
获取取消令牌。因此,您不需要传入取消令牌,这就是方法不接受取消令牌的原因。

但是他从哪里获得对HttpContext的访问权?他能够做到这一点的唯一方法是注入iSeries提供程序,但他只是为了获取ILookupProtectorKeyRing/ILookupProtector或令牌提供程序而使用它。我看不到他在哪里使用HttpContext做任何事情,甚至在哪里设置cancellationToken?DbContext有一个内部服务提供者。关键是你根本不需要担心这个。UserManager负责处理开箱即用的取消。你什么都不做。有没有提示如何在
后台服务中使用
用户管理器
?有时似乎会触发与后台服务无关的取消令牌。在我的服务中,我有一个循环,它检查一些条件,如果它们通过,就会创建一个新的
IServiceScope
,我从中检索
UserManager
。如果它总是绑定到某个(不相关的)
HttpContext
,那真是一团糟。我应该如何独立于任何
HttpContext
使用它?它仅在HttpContext存在时使用(web请求)。它不会创造一个。至于取消,无论如何,这是某种外部过程的函数。就像用户关闭另一端的连接一样。在无人参与的情况下,比如后台服务,支持取消是没有意义的,因为没有任何东西可以取消。我想我必须调查一下,是什么触发了取消。我这里有一个Asp.Net核心应用程序,带有托管服务,所以或多或少是两全其美。后台服务中唯一可能发生的取消是停止服务。非常感谢。