mam jedną usługę powiedzmy,Oczekujcie lub Task.FromResult
public interface ISomeService
{
Task<bool> DoSomeExpensiveCheckAsync(string parameter);
}
I mam tę klasę do konsumpcji usługi. Wystarczy wykonać kilka prostych sprawdzeń zerowych, a następnie zwrócić odpowiedź usługi.
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);
}
}
powinienem zrobić DoSomething1Async
lub DoSomething2Async
?
Według this answer, nie powinien zawijać z niepotrzebnym await
ale potem muszę używać Task.FromResult(false)
dla shortcircuiting jak w DoSomething2Async
Ale według this answer istnieją przypadki try/catch
i using
sprawozdania gdzie faktycznie powinien await
przed powracający.
Czy mam rację mówiąc następnie, że
Jeśli muszę używać
try/catch
lubusing
potem powinnoawait
Inaczej nie
await
jeśli idziesz tylko do powrotu. I używaćTask.FromResult
do zwarcia
Lubię DoSomething1Async
więcej, i chcę to zrobić wszędzie, jeśli ktoś mówi, że nie robi sprawy :).
Dzięki Cory. Nie rozumiem jednak, jak wpływa to na bezpieczeństwo zachowania. Zobacz mój komentarz do odpowiedzi @ I3arnon. – labroo
Edytowałem w wyjaśnieniu. –