[英]Is it safe to read the Task.Result property from a method that returns Task.FromResult(...)?
[英]Why use Task.FromResult<T>(T result) from a method that contains awaits?
我在教程中遇到了以下方法;
private async Task<ClaimsIdentity> GetClaimsIdentity(string userName, string password)
{
if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password))
return await Task.FromResult<ClaimsIdentity>(null);
// get the user to verifty
var userToVerify = await _userManager.FindByNameAsync(userName);
if (userToVerify == null) return await Task.FromResult<ClaimsIdentity>(null);
// check the credentials
if (await _userManager.CheckPasswordAsync(userToVerify, password))
{
return await Task.FromResult(_jwtFactory.GenerateClaimsIdentity(userName, userToVerify.Id));
}
// Credentials are invalid, or account doesn't exist
return await Task.FromResult<ClaimsIdentity>(null);
}
即使返回 null,作者也始终使用await Task.FromResult<ClaimsIdentity>(...)
。 我不是 Task-await 模式的专家,我会写这样的方法;
private async Task<ClaimsIdentity> GetClaimsIdentity(string userName, string password)
{
if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password))
return null;
// get the user to verifty
var userToVerify = await _userManager.FindByNameAsync(userName);
if (userToVerify == null) return null;
// check the credentials
if (await _userManager.CheckPasswordAsync(userToVerify, password))
{
return _jwtFactory.GenerateClaimsIdentity(userName, userToVerify.Id);
}
// Credentials are invalid, or account doesn't exist
return null;
}
两者都编译。 这两种方法有什么区别(如果有的话)? 以这种方式使用await Task.FromResult<ClaimsIdentity>(null)
有什么await Task.FromResult<ClaimsIdentity>(null)
吗?
根据我找到的关于Task.FromResult
的最佳 stackoverflow 答案: https : Task.FromResult
Task.FromResult
的用法仅适用于同步方法和Task.FromResult
的上下文。 因此,当您只想返回结果时,在异步方法中使用它是多余的 - 不会给您带来额外的好处,而且AsyncGuidance也没有说明在异步方法中使用Task.FromResult
任何内容: https : //github.com/davidfowl/ AspNetCoreDiagnosticScenarios/blob/master/AsyncGuidance.md
因此,AFAIK 在异步方法中使用Task.FromResult
是不必要的,它会使您的代码变得臃肿并且不会给您带来真正的好处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.