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 operadoresawait. Um método marcado comoasyncpode retornarTask,Task<T>ouvoid(emboravoiddeva ser evitado, exceto em manipuladores de eventos). OTaskouTask<T>retornado representa uma operação que ainda não foi concluída.await: Aplica-se a uma operação assíncrona (que retornaTaskouTask<T>). Quando a execução atinge o operadorawait, 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 mesmoawaitem 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.