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.