Ответ вслух Middle async/await и Task спрашивают часто обновлено

Типичные ошибки с async/await

Вопрос

Какие ошибки с async/await вы встречали и как их избежать?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Первая ошибка: блокирующее ожидание. .Result и .Wait() в UI дают дедлок, а в ASP.NET Core под нагрузкой приводят к голоданию пула потоков: потоки заняты ожиданием, новые запросы встают в очередь. Правило: async до самого верха.

Что должно прозвучать в ответе

  • Блокировка через .Result и .Wait: дедлоки и голодание пула

  • async void вне обработчиков событий

  • Последовательные await вместо Task.WhenAll для независимых операций

  • Забытый await: fire-and-forget и потерянные исключения

  • Неиспользуемый CancellationToken

  • Параллельное использование одного DbContext из нескольких задач

Что могут спросить следом

  • Как безопасно запустить фоновую работу в ASP.NET Core?
  • Что будет, если не ждать задачу, которая бросила исключение?

Разбор

Первая ошибка: блокирующее ожидание. .Result и .Wait() в UI дают дедлок, а в ASP.NET Core под нагрузкой приводят к голоданию пула потоков: потоки заняты ожиданием, новые запросы встают в очередь. Правило: async до самого верха.

Вторая: async void в обычных методах. Исключение из него роняет процесс, а дождаться его нельзя. Третья: забытый await. Задача улетает в фоне, исключение теряется, а иногда метод ещё работает, когда запрос уже закончился и DbContext освобождён.

Четвёртая: последовательные await для независимых запросов вместо Task.WhenAll. Пятая: токен отмены принимают, но не передают дальше, и отмена запроса клиентом не останавливает работу. И отдельная беда: один DbContext в нескольких параллельных задачах, он не потокобезопасен и бросает исключение. Для фоновой работы в ASP.NET Core использую BackgroundService и очередь через Channel<T>, а не Task.Run из контроллера.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме