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.