Sobes.tech
Middle

Jak zachytit výjimky v kódu pomocí await?

sobes.tech AI

Odpověď od AI

Výjimky v kódu, který používá await, jsou zachyceny pomocí standardních bloků try...catch.

Příklad:

public async Task GetDataAsync()
{
    try
    {
        // Volání asynchronní operace, která může vyvolat výjimku
        var result = await SomeService.FetchDataFromApiAsync();
        // Zpracování úspěšného výsledku
    }
    catch (UnauthorizedAccessException ex)
    {
        // Zpracování specifické výjimky (například chybějící práva)
        Console.WriteLine($"Chyba autorizace: {ex.Message}");
    }
    catch (HttpRequestException ex)
    {
        // Zpracování výjimky HTTP požadavku (například problémy sítě)
        Console.WriteLine($"Chyba HTTP požadavku: {ex.Message}");
    }
    catch (Exception ex)
    {
        // Zpracování všech ostatních nezachycených výjimek
        Console.WriteLine($"Nastala neočekávaná chyba: {ex.Message}");
    }
}

Pokud asynchronní operace, na kterou odkazuje await, vyvolá výjimku, je provádění přímého toku kódu přerušeno a kontrola je předána do odpovídajícího bloku catch ve stejné asynchronní funkci (nebo volající). Bez await nebude výjimka z asynchronní operace zachycena volající funkcí, dokud nebude úkol/operace dokončena a její výsledek/výjimka požadována (například přes .Result nebo .Wait(), což se nedoporučuje). await ve skutečnosti "rozbalí" výjimku z úkolu a znovu ji vyhodí, což umožňuje její zachycení běžným způsobem pomocí try...catch.