Sobes.tech
Middle

Come catturare le eccezioni nel codice usando await?

sobes.tech AI

Risposta dell'AI

Le eccezioni nel codice che utilizza await vengono catturate tramite blocchi standard try...catch.

Esempio:

public async Task GetDataAsync()
{
    try
    {
        // Chiamata a un'operazione asincrona che può generare un'eccezione
        var result = await SomeService.FetchDataFromApiAsync();
        // Elaborazione del risultato con successo
    }
    catch (UnauthorizedAccessException ex)
    {
        // Gestione di un'eccezione specifica (ad esempio, mancanza di permessi)
        Console.WriteLine($"Errore di autorizzazione: {ex.Message}");
    }
    catch (HttpRequestException ex)
    {
        // Gestione di un'eccezione di richiesta HTTP (ad esempio, problemi di rete)
        Console.WriteLine($"Errore di richiesta HTTP: {ex.Message}");
    }
    catch (Exception ex)
    {
        // Gestione di qualsiasi altra eccezione non gestita
        Console.WriteLine($"Si è verificato un errore imprevisto: {ex.Message}");
    }
}

Se l'operazione asincrona puntata da await lancia un'eccezione, l'esecuzione del flusso di codice diretto viene interrotta e il controllo passa al blocco catch corrispondente nella stessa funzione asincrona (o in quella chiamante). Senza await, l'eccezione dell'operazione asincrona non sarà catturata dalla funzione chiamante fino a quando il task/operazione non sarà completata e il suo risultato/eccezione non sarà richiesto (ad esempio, tramite .Result o .Wait(), cosa non raccomandata). await "sbrogli" in realtà l'eccezione dal task e la rilancia, rendendo possibile la cattura tramite try...catch in modo consueto.