Middle
Как да уловим изключения в кода с помощта на await?
sobes.tech AI
Отговор от AI
Изключенията в кода, който използва await, се улавят чрез стандартните блокове try...catch.
Пример:
public async Task GetDataAsync()
{
try
{
// Вика на асинхронна операция, която може да генерира изключение
var result = await SomeService.FetchDataFromApiAsync();
// Обработка на успешния резултат
}
catch (UnauthorizedAccessException ex)
{
// Обработка на специфично изключение (например, липса на права)
Console.WriteLine($"Грешка при авторизация: {ex.Message}");
}
catch (HttpRequestException ex)
{
// Обработка на изключение при HTTP заявка (например, проблеми с мрежата)
Console.WriteLine($"Грешка при HTTP заявка: {ex.Message}");
}
catch (Exception ex)
{
// Обработка на всички други непотушени изключения
Console.WriteLine($"Настъпи неочаквана грешка: {ex.Message}");
}
}
Ако асинхронната операция, към която сочи await, хвърли изключение, изпълнението на директния поток от код се прекъсва и управлението се прехвърля към съответния блок catch в същата асинхронна функция (или в тази, която я извиква). Без await изключението от асинхронната операция няма да бъде уловено от извикващата функция, докато задачата/операцията не бъде завършена и нейният резултат/изключение не бъде поискано (например чрез .Result или .Wait(), което не се препоръчва). await всъщност "разгъва" изключението от задачата и го пренасочва, правейки възможно неговото уловене по обичайния начин с try...catch.