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