Sobes.tech
Middle

Como funciona um método assíncrono em C#?

sobes.tech IA

Resposta da IA

O método assíncrono em C# permite executar operações que podem levar um tempo prolongado (por exemplo, entrada/saída, pedidos de rede) sem bloquear o thread principal de execução.

Ao chamar um método assíncrono marcado com a palavra-chave async, o controlo é transferido para o código que o chamou até que a operação assíncrona seja concluída. A operação é executada em segundo plano (por exemplo, usando um pool de threads ou mecanismos de entrada/saída do sistema).

A palavra-chave await dentro do método assíncrono indica onde a operação assíncrona pode ser suspensa. Quando a execução atinge await, o controlo é devolvido ao código que chamou, e a continuação do método é agendada para ser executada quando a operação esperada terminar.

O resultado da operação assíncrona (ou uma exceção) é então devolvido à continuação do método assíncrono, onde é processado. O estado do método assíncrono é gerido automaticamente pelo compilador C#, que o transforma numa máquina de estados finita.

public async Task<string> GetDataAsync(string url)
{
    // Simulação de uma operação de entrada/saída prolongada
    using (var httpClient = new HttpClient())
    {
        string result = await httpClient.GetStringAsync(url); // await: a execução do método pode ser suspensa
        return result;
    }
}

// Exemplo de chamada a um método assíncrono
public async Task ProcessDataAsync(string url)
{
    Console.WriteLine("Início do carregamento de dados...");
    string data = await GetDataAsync(url); // Espera pela conclusão da operação assíncrona
    Console.WriteLine("Dados carregados: " + data.Length + " caracteres.");
}