Sobes.tech
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.