[Dica] Agrupamento de operações assíncronas em C#
Olá a todos, infelizmente eu ando muito na correria e acabo não conseguindo postar muitos conteúdos aqui, mas pelo menos consigo ler e prestigiar alguns. Inclusive alguns projetos pessoais meus encontram-se pausados devido (principalmente o RodyDB) o trabalho.
Mas bom, vamos lá a pequena dica de hoje que é algo simples mas que faz bastante diferença no quesito desempenho: o agrupamento de chamadas assíncronas. Lembrando que a linguagem de programação que irá ser demonstrada o exemplo é C#.
Exemplo 1 - Chamadas consecutivas de métodos assíncronos
public async Task CallApis()
{
await FirstApi();
await SecondApi();
await ThirdApi();
}
Nesse exemplo, aguardaremos várias chamadas. Portanto, o método inteiro será executado na soma de vezes que cada chamada assíncrona leva para ser concluída.
Exemplo 2 - Agrupamento das chamadas
public async Task CallApis()
{
await Task.WhenAll(
FirstApi(),
SecondApi(),
ThirdApi()
);
}
Nesse exemplo, colocamos a dica em prática. As chamadas serão executadas em "paralelo" e será concluído quando a chamada assíncrona mais lenta terminar.
Observações importantes:
- Aguardar a conclusão da chamada mais lenta é mais rápido do que esperar que todas as chamadas sejam concluídas uma a uma.
- Você não pode usar essa abordagem se precisar do resultado de uma operação assíncrona para executar a próxima.
Então é isso pessoal, espero que tenham gostado e qualquer coisa só comentar =)
Abraços!
Foi feito o uso de pseudocódigos para exemplificar melhor, caso queira ver melhor do uso dessa função WhenAll recomendo consultar a fonte.