Как можно с помощью await отловить исключения в коде?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech 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 привычным способом возможным.