Исключения в коде с использованием await отлавливаются стандартными блоками try...catch.
Пример:
csharp
Если асинхронная операция, на которую указывает await, выбрасывает исключение, выполнение прямого потока кода прерывается, и управление передается в соответствующий блок catch в той же асинхронной функции (или вызывающей ее). Без await исключение из асинхронной операции не будет перехвачено вызвавшей функцией до тех пор, пока таск/операция не будет завершена и ее результат/исключение не запрошено (например, через .Result или .Wait(), что не рекомендуется). await фактически "разворачивает" исключение из таска и перебрасывает его, делая перехват с помощью try...catch привычным способом возможным.