Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Giovanne Barbosa
Giovanne Barbosa

Posted on

     

Otimizando chamadas assincronas com Task.WhenAll

Imagine que temos uma classeVeiculoService e dentro dela dois métodos (ObterCarros eObterMotos). E esses métodos fazem uma busca em uma base de dados "recheada", o que faz cada um deles levar 5 segundos para retornar cada informação.

publicclassVeiculoService{publicasyncTask<string>ObterCarros(stringmarca){awaitTask.Delay(5000);return$"Conclui busca de veiculos da marca{marca}";}publicasyncTask<string>ObterMotos(stringmarca){awaitTask.Delay(5000);return$"Conclui busca de Motos da marca{marca}";}}
Enter fullscreen modeExit fullscreen mode

Agora imagine que temos um programa que precise fazer a chamada desses dois métodos para retornar essas duas listas:

classProgram{staticasyncTaskMain(string[]args){varveiculoService=newVeiculoService();varcarros=awaitveiculoService.ObterCarros("xpto");varmotos=awaitveiculoService.ObterMotos("xpto");Console.WriteLine(carros);Console.WriteLine(motos);}}
Enter fullscreen modeExit fullscreen mode

No código acima nós instanciamos a classeVeiculoService, chamamos o seu métodoObterCarros, guardamos em uma variável e logo em seguida chamamos o métodoObterMotos guardando também em outra variável. Por fim printamos na tela os dois resultados.

Ao executar o programa observamos que o tempo de processo foi em torno de 10 segundos. Isso porque estamos excutando os dois métodos em sequencia e os dois levam aproximadamente 5s para serem executados.

resultado do console mostrando o retorno do programa executado e o seu tempo de processamento

É possível diminuir consideravelmente esse tempo de processo com o métodoTask.WhenAll:

classProgram{staticasyncTaskMain(string[]args){varveiculoService=newVeiculoService();varveiculos=veiculoService.ObterCarros("xpto");varmarcas=veiculoService.ObterMotos("xpto");awaitTask.WhenAll(veiculos,marcas);Console.WriteLine(veiculos.Result);Console.WriteLine(marcas.Result);}}
Enter fullscreen modeExit fullscreen mode

Observando o console, podemos ver que o tempo de execução caiu pela metade:

resultado do console mostrando o retorno do programa executado e o seu tempo de processamento

Isso acontece pois oTask.WhenAll executa os métodos em paralelo. O que é muito útil para casos em que temos varias chamadas de métodos que não dependem do resultado um do outro, salvando um tempo que muitas vezes pode ser precioso para o seu programa.

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

Desenvolvedor Fullstack;Pós graduando em Arquitetura de SoftwareGraduado em Análise e Desenvolvimento de Sistemas;Técnico em Eletroeletrônica;Skatista;
  • Location
    São Paulo
  • Pronouns
    Ele/Dele
  • Work
    Full-Stack developer at São Paulo
  • Joined

Trending onDEV CommunityHot

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp