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}";}}
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);}}
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.
É 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);}}
Observando o console, podemos ver que o tempo de execução caiu pela metade:
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)
For further actions, you may consider blocking this person and/orreporting abuse