繁体   English   中英

为什么使用 Task.FromResult<T> (T result) 来自包含等待的方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM