Imagine que temos uma classe VeiculoService e dentro dela dois métodos (ObterCarros e ObterMotos). 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.
public class VeiculoService
{
public async Task<string> ObterCarros(string marca)
{
await Task.Delay(5000);
return $"Conclui busca de veiculos da marca {marca}";
}
public async Task<string> ObterMotos(string marca)
{
await Task.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:
class Program
{
static async Task Main(string[] args)
{
var veiculoService = new VeiculoService();
var carros = await veiculoService.ObterCarros("xpto");
var motos = await veiculoService.ObterMotos("xpto");
Console.WriteLine(carros);
Console.WriteLine(motos);
}
}
No código acima nós instanciamos a classe VeiculoService, chamamos o seu método ObterCarros, guardamos em uma variável e logo em seguida chamamos o método ObterMotos 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étodo Task.WhenAll:
class Program
{
static async Task Main(string[] args)
{
var veiculoService = new VeiculoService();
var veiculos = veiculoService.ObterCarros("xpto");
var marcas = veiculoService.ObterMotos("xpto");
await Task.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 o Task.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)