Sobes.tech
Junior

O que é programação assíncrona usando as palavras-chave async e await?

sobes.tech IA

Resposta da IA

A programação assíncrona com async e await permite executar operações que podem levar tempo (por exemplo, entrada/saída, pedidos de rede) sem bloquear o thread principal de execução do programa. Isto melhora a capacidade de resposta da aplicação.

  • async: Usado para modificar um método e indica ao compilador que dentro dele serão usados operadores await. Um método marcado como async pode retornar Task, Task<T> ou void (embora void deva ser evitado, exceto em manipuladores de eventos). O Task ou Task<T> retornado representa uma operação que ainda não foi concluída.
  • await: Aplica-se a uma operação assíncrona (que retorna Task ou Task<T>). Quando a execução atinge o operador await, o método é "suspenso", liberando o thread atual. A operação assíncrona é executada em segundo plano (ou usa um pool de threads, ou o mecanismo de entrada/saída do sistema operativo). Quando a operação termina, a execução do método é retomada após o mesmo await em outro thread ou no mesmo se estiver disponível.

Exemplo de uso básico:

// método async que retorna Task
public async Task DoSomethingAsync()
{
    // Executa uma operação assíncrona esperando sua conclusão
    await Task.Delay(1000); // Simulação de uma operação prolongada
    Console.WriteLine("Operação assíncrona concluída.");
}

// método async que retorna Task<int>
public async Task<int> GetValueAsync()
{
    await Task.Delay(500);
    return 42;
}

// Uso de async e await no método Main (para o exemplo, em aplicações reais normalmente iniciado a partir de um Main async no .NET Core 3.0+)
public static async Task Main(string[] args)
{
    Console.WriteLine("A iniciar...");
    
    // Chama métodos assíncronos
    await DoSomethingAsync();
    int result = await GetValueAsync();
    
    Console.WriteLine($"Resultado: {result}");
    Console.WriteLine("Terminado.");
}

A principal vantagem de async/await em comparação com o tratamento manual de threads ou callbacks é a simplificação na escrita e leitura do código assíncrono. Ele parece quase igual ao código síncrono, mas não bloqueia o thread, o que é crucial para aplicações com interface de utilizador ou aplicações servidor com alta carga.