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
,并将其用于所有任务。
如 the Microsoft docs 所述:
The cancellation token returned by this property cannot be canceled
因此 UserManager
的所有任务将在调用 Dispose()
方法后除外,因为 ThrowIfDisposed
为所有任务调用。
我目前正在基于 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
,并将其用于所有任务。
如 the Microsoft docs 所述:
The cancellation token returned by this property cannot be canceled
因此 UserManager
的所有任务将在调用 Dispose()
方法后除外,因为 ThrowIfDisposed
为所有任务调用。