Sobes.tech
Middle

Ako zachytiť výnimky v kóde pomocou await?

sobes.tech AI

Odpoveď od AI

Výnimky v kóde, ktorý používa await, sa zachytávajú pomocou štandardných blokov try...catch.

Príklad:

public async Task GetDataAsync()
{
    try
    {
        // Volanie asynchrónnej operácie, ktorá môže vyvolať výnimku
        var result = await SomeService.FetchDataFromApiAsync();
        // Spracovanie úspešného výsledku
    }
    catch (UnauthorizedAccessException ex)
    {
        // Spracovanie špecifickej výnimky (napríklad chýbajúce práva)
        Console.WriteLine($"Chyba autorizácie: {ex.Message}");
    }
    catch (HttpRequestException ex)
    {
        // Spracovanie výnimky HTTP požiadavky (napríklad problémy s sieťou)
        Console.WriteLine($"Chyba HTTP požiadavky: {ex.Message}");
    }
    catch (Exception ex)
    {
        // Spracovanie všetkých ostatných nezachytených výnimiek
        Console.WriteLine($"Nastala neočakávaná chyba: {ex.Message}");
    }
}

Ak asynchrónna operácia, na ktorú odkazuje await, vyhodí výnimku, vykonávanie priameho toku kódu sa preruší a kontrola sa presunie na príslušný catch blok v tej istej asynchrónnej funkcii (alebo v tej, ktorá ju volá). Bez await nebude výnimka z asynchrónnej operácie zachytená volajúcou funkciou, kým sa operácia/úloha nedokončí a jej výsledok/výnimka nebude požadovaná (napríklad cez .Result alebo .Wait(), čo sa neodporúča). await v skutočnosti "rozbalí" výnimku z úlohy a ju znovu vyhodí, čím umožní jej zachytenie bežným spôsobom pomocou try...catch.