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.