Выбор ответа Junior async/await и Task спрашивают часто обновлено

Чем опасен async void

Вопрос

Почему async void используют только для обработчиков событий?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Его нельзя дождаться, а исключение из него может уронить процесс. У async void нет Task, который можно ожидать: вызывающий не знает, когда метод закончится, и не может поймать его исключение.

Варианты ответа

  1. Его нельзя дождаться, а исключение из него может уронить процессправильный ответ
  2. async void выполняется синхронно до конца, как обычный метод
  3. async void нельзя вызвать из обычного синхронного метода
  4. async void всегда выполняется в UI-потоке через контекст

Разбор

У async void нет Task, который можно ожидать: вызывающий не знает, когда метод закончится, и не может поймать его исключение. Необработанное исключение пробрасывается в SynchronizationContext или в пул потоков, где обычно завершает процесс. Выполняется он так же, как async Task, вызвать его можно откуда угодно. Для событий другой сигнатуры нет, поэтому там async void допустим, но внутри нужен try/catch.

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

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

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