Attendre ou de la Tâche.FromResult

J'ai un service permet de dire,

public interface ISomeService
{
    Task<bool> DoSomeExpensiveCheckAsync(string parameter);
}

Et j'ai cette classe pour utiliser le service. Il a juste besoin de faire quelques simples null vérifications et puis retourner le service de réponse en retour.

public class SomeServiceConsumer
{
    private readonly ISomeService _serviceClient;

    public SomeServiceConsumer(ISomeService serviceClient)
    {
        _serviceClient = serviceClient;
    }

    public async Task<bool> DoSomething1Async(string someParameter)
    {
        if (string.IsNullOrWhiteSpace(someParameter))
        {
            return false;
        }
        return await _serviceClient.DoSomeExpensiveCheckAsync(someParameter);
    }

    //No async or await keywords   
    public Task<bool> DoSomething2Async(string someParameter)
    {
        if (string.IsNullOrWhiteSpace(someParameter))
        {
            return Task.FromResult(false);
        }
        return _serviceClient.DoSomeExpensiveCheckAsync(someParameter);
    }
}

Dois-je faire DoSomething1Async ou DoSomething2Async?

Selon cette réponse, je ne devrais pas envelopper avec une inutile await mais puis-je utiliser Task.FromResult(false) pour un court-circuit comme dans DoSomething2Async

Mais selon cette réponse il y a des cas avec try/catch et using états où j'ai vraiment devrait await avant de revenir.

Ai-je raison de dire alors, que

  1. Si je dois utiliser try/catch ou using puis je devrais await
  2. Autrement, ne pas await si vous allez seulement pour le retour. Et l'utilisation Task.FromResult pour le court-circuit

J'aime DoSomething1Async plus, et que vous voulez le faire partout si quelqu'un dit que ce n'est pas grave :).

OriginalL'auteur labroo | 2014-11-12