ho un unico servizio consente di dire,Await o Task.FromResult
public interface ISomeService
{
Task<bool> DoSomeExpensiveCheckAsync(string parameter);
}
E devo questa classe di consumare il servizio. Ha solo bisogno di fare alcuni semplici controlli null e quindi restituire la risposta del servizio.
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);
}
}
Devo fare DoSomething1Async
o DoSomething2Async
?
Secondo this answer, non dovrei avvolgere con un inutile await
ma poi ho dovuto usare Task.FromResult(false)
per cortocircuitando come in DoSomething2Async
Ma secondo this answer ci sono casi con try/catch
e using
dichiarazioni in cui ho effettivamente dovrebbe await
prima ritorno.
Ho ragione nel dire quindi, che
Se devo usare
try/catch
ousing
allora dovreiawait
altrimenti non
await
se si sta solo andando a tornare. E utilizzareTask.FromResult
per corto circuito
mi piace di più DoSomething1Async
, e voglio farlo ovunque, se qualcuno dice che non importa :).
Grazie Cory. Non capisco come influisce sulla sicurezza del comportamento però. Vedi il mio commento alla risposta di @ I3arnon. – labroo
Ho modificato in una spiegazione. –