Imagem de fundo

Em um serviço ASP.NET Core, fora de manipuladores de evento, qual é o retorno apropriad...

Em um serviço ASP.NET Core, fora de manipuladores de evento, qual é o retorno apropriado para métodos assíncronos, considerando observação de exceções, possibilidade de await pelo chamador e boas práticas de escalabilidade?


A

Preferir ValueTask/ValueTask<T> em todos os métodos para reduzir alocações; quando o método apenas “dispara e esquece”, usar async void para simplificar.


B

Reservar async void apenas para manipuladores de eventos; para métodos de serviço/repositório, retornar Task/Task<T>.


C

await não bloqueia, mas em ASP.NET Core o contexto é sempre recapturado; por isso, ConfigureAwait(false) é obrigatório para evitar deadlocks.


D

Para não “segurar” a thread de requisição, envolver todo I/O em Task.Run e retornar void quando não houver resultado.


E

Retornar Task quando houver resultado e async void quando não houver, já que o chamador não precisa aguardar.