Middle
Cum se pot captura excepțiile în cod folosind await?
sobes.tech AI
Răspuns de la AI
Excepțiile din codul care utilizează await sunt capturate de blocurile standard try...catch.
Exemplu:
public async Task GetDataAsync()
{
try
{
// Apelarea unei operații asincrone care poate genera excepție
var result = await SomeService.FetchDataFromApiAsync();
// Procesarea rezultatului cu succes
}
catch (UnauthorizedAccessException ex)
{
// Tratarea unei excepții specifice (de exemplu, lipsa permisiunilor)
Console.WriteLine($"Eroare de autorizare: {ex.Message}");
}
catch (HttpRequestException ex)
{
// Tratarea unei excepții de cerere HTTP (de exemplu, probleme de rețea)
Console.WriteLine($"Eroare de cerere HTTP: {ex.Message}");
}
catch (Exception ex)
{
// Tratarea oricăror alte excepții necontrolate
Console.WriteLine($"A apărut o eroare neașteptată: {ex.Message}");
}
}
Dacă operația asincronă indicată de await aruncă o excepție, execuția fluxului de cod direct este întreruptă, iar controlul trece la blocul catch corespunzător din aceeași funcție asincronă (sau din cea care o apelează). Fără await, excepția din operația asincronă nu va fi capturată de funcția apelantă până când task-ul/operația nu se va finaliza și rezultatul/excepția nu va fi solicitată (de exemplu, prin .Result sau .Wait(), ceea ce nu este recomandat). await "desfășoară" de fapt excepția din task și o aruncă din nou, făcând posibilă capturarea acesteia în mod obișnuit cu try...catch.