Назад к вопросам
Middle
70
questionbank

Как можно с помощью 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 привычным способом возможным.