ASP.NET Core UserManager 中的取消

Cancellation in ASP.NET Core UserManager

我目前正在基于 Asp.Net Core Identity 的 UserManger 设计实现一些服务。 在实现中,我想知道如果不可能将取消令牌传递到 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;
    }

}

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

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

UserManager中,设置CancellationToken = CancellationToken.None,并将其用于所有任务。

https://github.com/dotnet/aspnetcore/blob/b9efadc59ddbf6743775244622fb95301dd1846c/src/Identity/Extensions.Core/src/UserManager.cs#L53

the Microsoft docs 所述:

The cancellation token returned by this property cannot be canceled

因此 UserManager 的所有任务将在调用 Dispose() 方法后除外,因为 ThrowIfDisposed 为所有任务调用。