ASP.NET Core UserManager 中的取消

Ret*_*ott 5 cancellation cancellation-token asp.net-core asp.net-core-3.0

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

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

protected virtual CancellationToken CancellationToken => CancellationToken.None;
Run Code Online (Sandbox Code Playgroud)

如何将我在控制器中使用的取消令牌(例如)传递到用户管理器中?我是否必须重载它并通过新方法将其传递给它?

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

    protected override CancellationToken CancellationToken  {get;set;}

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

}
Run Code Online (Sandbox Code Playgroud)

这是使用 userManager 完成取消的正确方法吗?如果是:为什么这与使用取消令牌的其他组件不同,例如 EF Core,您必须通过方法参数传递 CancellationToken?

Chr*_*att 5

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