Middle
Como funciona o mecanismo async/await em C#?
sobes.tech IA
Resposta da IA
O mecanismo async/await permite escrever código assíncrono que parece síncrono.
- Palavra-chave
async: Marca um método como assíncrono. Tal método pode conter a instruçãoawait. - Palavra-chave
await: Usada antes de chamar uma operação assíncrona (geralmente um método que retornaTaskouTask<T>). Quando a execução chega aawait, o controlo é devolvido ao método que o chamou, e o thread libertado pode realizar outra tarefa. Task/Task<T>: Representa uma promessa de completar uma operação assíncrona e o seu resultado (paraTask<T>).await"espera" a conclusão desta "promessa".- Máquina de estados: O compilador transforma o método assíncrono numa máquina de estados. Esta máquina guarda o estado do método ao chegar a
await. - Continuação: Quando a tarefa esperada termina, o ambiente de execução programa a execução da parte restante do método assíncrono (a continuação) num thread do pool ou no mesmo contexto de sincronização se estiver capturado.
- Retorno do controlo: Após completar a operação assíncrona, o controlo regressa ao ponto após
await, e a execução do método continua com o estado guardado.
// Método assíncrono
async Task<int> GetLengthAsync(string url)
{
// Criar cliente HTTP
using var client = new HttpClient();
// Realizar pedido assíncrono à URL
// Await espera a conclusão do pedido sem bloquear o thread
string content = await client.GetStringAsync(url);
// A continuação é executada após obter o conteúdo
return content.Length;
}
// Uso do método assíncrono
async void Button_Click(object sender, EventArgs e)
{
// Await espera que GetLengthAsync termine
// O thread da UI não fica bloqueado
int length = await GetLengthAsync("https://example.com");
// Atualizar elemento UI
Label1.Text = $"Comprimento do conteúdo: {length}";
}