gpt4 book ai didi

c# - ASP.NET Identity 使用 ConfigureAwait(false),为什么安全?

转载 作者:太空宇宙 更新时间:2023-11-03 21:14:37 25 4
gpt4 key购买 nike

阅读 ASP.NET Identity 的源代码时,我注意到了一些让我感到困惑的事情。有几次,我发现他们使用 ConfigureAwait(false) :

/// <summary>
/// Create a ClaimsIdentity from a user
/// </summary>
/// <param name="manager"></param>
/// <param name="user"></param>
/// <param name="authenticationType"></param>
/// <returns></returns>
public virtual async Task<ClaimsIdentity> CreateAsync(
UserManager<TUser, TKey> manager, TUser user, string authenticationType)
{
if (manager == null) {
throw new ArgumentNullException("manager");
}
if (user == null) {
throw new ArgumentNullException("user");
}
var id = new ClaimsIdentity(authenticationType, UserNameClaimType, RoleClaimType);
id.AddClaim(new Claim(UserIdClaimType, ConvertIdToString(user.Id), ClaimValueTypes.String));
id.AddClaim(new Claim(UserNameClaimType, user.UserName, ClaimValueTypes.String));
id.AddClaim(new Claim(IdentityProviderClaimType, DefaultIdentityProviderClaimValue, ClaimValueTypes.String));
if (manager.SupportsUserSecurityStamp) {
id.AddClaim(new Claim(SecurityStampClaimType, await manager.GetSecurityStampAsync(user.Id).ConfigureAwait(false)));
}
if (manager.SupportsUserRole) {
var roles = await manager.GetRolesAsync(user.Id).ConfigureAwait(false);
foreach (var roleName in roles) {
id.AddClaim(new Claim(RoleClaimType, roleName, ClaimValueTypes.String));
}
}
if (manager.SupportsUserClaim) {
id.AddClaims(await manager.GetClaimsAsync(user.Id).ConfigureAwait(false));
}
return id;
}

我理解使用它的必要性,但我想知道为什么在使用其中一种 ASP.NET 标识方法后依赖请求上下文对我们来说是安全的——我假设它应该是安全的,因为我还没有遇到过来自微软的任何相反的指导方针。

我们真的可以保证我们会回到正确的环境吗?如果是这样怎么可能?

最佳答案

I'm wondering why it is safe for us to rely on the request context after using one of the ASP.NET Identity Methods

因为只有他们在 CreateAsync 中使用的内部任务才会忽略上下文。由您的方法创建的 Task(也可能是异步的并调用 CreateAsync)仍将捕获 ASP.NET SynchronizationContext,这将确保您马上回到正确的请求上下文。

一般来说,这就是异步方法的工作方式。如果任何内部任务使用 ConfigureAwait(false) 忽略上下文,这并不意味着整个调用堆栈现在将脱离上下文,它只是 那个异步方法< 的实现/em> 丢弃上下文。

关于c# - ASP.NET Identity 使用 ConfigureAwait(false),为什么安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35252668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com