Sobes.tech
Middle

¿Cómo se pueden capturar excepciones en el código usando await?

sobes.tech AI

Respuesta de la IA

Las excepciones en el código que utilizan await se capturan mediante bloques estándar try...catch.

Ejemplo:

public async Task GetDataAsync()
{
    try
    {
        // Llamada a una operación asíncrona que puede generar una excepción
        var result = await SomeService.FetchDataFromApiAsync();
        // Procesamiento del resultado exitoso
    }
    catch (UnauthorizedAccessException ex)
    {
        // Manejo de una excepción específica (por ejemplo, falta de permisos)
        Console.WriteLine($"Error de autorización: {ex.Message}");
    }
    catch (HttpRequestException ex)
    {
        // Manejo de una excepción de solicitud HTTP (por ejemplo, problemas de red)
        Console.WriteLine($"Error en la solicitud HTTP: {ex.Message}");
    }
    catch (Exception ex)
    {
        // Manejo de cualquier otra excepción no controlada
        Console.WriteLine($"Se produjo un error inesperado: {ex.Message}");
        // Acciones adicionales: registro, notificación al usuario, etc.
    }
}

Si la operación asíncrona a la que apunta await lanza una excepción, la ejecución del flujo directo del código se interrumpe y el control pasa al bloque catch correspondiente en la misma función asíncrona (o en la que la llama). Sin await, la excepción de la operación asíncrona no será capturada por la función que la invoca hasta que la tarea/operación se complete y su resultado/excepción sea solicitado (por ejemplo, mediante .Result o .Wait(), lo cual no se recomienda). await en realidad "desenrolla" la excepción de la tarea y la vuelve a lanzar, haciendo que la captura mediante try...catch sea posible de manera habitual.