Middle
Como capturar exceções no código usando await?
sobes.tech IA
Resposta da IA
As exceções no código que utiliza await são capturadas por blocos padrão try...catch.
Exemplo:
public async Task GetDataAsync()
{
try
{
// Chamada de uma operação assíncrona que pode gerar exceção
var result = await SomeService.FetchDataFromApiAsync();
// Processamento do resultado bem-sucedido
}
catch (UnauthorizedAccessException ex)
{
// Tratamento de exceção específica (por exemplo, falta de permissões)
Console.WriteLine($"Erro de autorização: {ex.Message}");
}
catch (HttpRequestException ex)
{
// Tratamento de exceção de requisição HTTP (por exemplo, problemas de rede)
Console.WriteLine($"Erro na requisição HTTP: {ex.Message}");
}
catch (Exception ex)
{
// Tratamento de quaisquer outras exceções não tratadas
Console.WriteLine($"Ocorreu um erro inesperado: {ex.Message}");
// Ações adicionais: registro, notificação ao usuário, etc.
}
}
Se a operação assíncrona apontada por await lançar uma exceção, a execução do fluxo de código direto é interrompida, e o controle passa para o bloco catch correspondente na mesma função assíncrona (ou na que a chama). Sem await, a exceção da operação assíncrona não será capturada pela função que a invoca até que a tarefa/operação seja concluída e seu resultado/exceção seja solicitado (por exemplo, via .Result ou .Wait(), o que não é recomendado). await na verdade "desenrola" a exceção da tarefa e a relança, tornando possível capturá-la com try...catch de forma habitual.