有一个可能会或可能不会异步的方法。怎么处理?

时间:2018-07-17 19:43:49

标签: c# asp.net-core async-await asp.net-core-2.0

我有一种方法,可以通过检查其所有凭据或使用刷新令牌来获取令牌。

  public TokenDto GenerateAuthToken(TokenRequestDto dto)
        {
            switch (dto.GrantType)
            {
                case "password":
                    return GetToken(dto.ClientId, dto.Email, dto.Password); 
                case "refresh_token":
                    return GetRefreshToken(dto.RefreshToken);
                default:
                    return null;
            }
        }

GetToken是异步的,因为我正在使用asp.net身份,并且内置方法是异步的。 GetRefreshToken没有异步。

我应该将GetRefreshToken标记为异步还是有更好的方法?

1 个答案:

答案 0 :(得分:1)

如果GetRefreshToken是同步方法,那么我不会通过将其标记为Task<T>来说谎。相反,我希望呼叫者使用已完成的任务

public Task<TokenDto> GenerateAuthToken(TokenRequestDto dto)
{
    switch (dto.GrantType)
    {
        case "password":
            // asynchronous, return the task
            return GetToken(dto.ClientId, dto.Email, dto.Password); 
        case "refresh_token":
            // synchronous, use a completed task
            return Task.FromResult(GetRefreshToken(dto.RefreshToken));
        default:
            // don't return null, throw instead
            throw new ArgumentOutOfRangeException(nameof(dto.GrantType));
    }
}