ASP.NET Core UserManager中的取消



我目前正在实现一些基于Asp.Net Core Identity的UserManger设计的服务。在实现中,我想知道如果不可能将cancellation Token传递到usermanager的方法中,那么usermanager如何支持取消。

我还看到usermanager内部有一个Cancellation Token属性(具有默认值(,它在内部使用,并将传递给使用的异步方法。但由于其保护级别为,因此无法访问此属性

protected virtual CancellationToken CancellationToken => CancellationToken.None;

例如,我如何将我在控制器中使用的Cancellation令牌传递到用户管理器?我必须重载它并通过一个新方法将它传递到它中吗?

public class MyUserManager : UserManager<MyUser>
{
/* ... Other stuff... */
protected override CancellationToken CancellationToken  {get;set;}
public void SetCancellationToken(CancellationToken cancellationToken)
{
this.CancellationToken = cancellationToken;
}
}

这是用userManager完成取消的正确方法吗?如果是:为什么这与使用CancellationToken的其他组件不同,比如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

如微软文档中所述:

此属性返回的取消令牌无法取消

所以UserManager的所有任务都将在调用Dispose()方法之后执行,因为所有任务都调用了ThrowIfDisposed

最新更新