Выбор ответа Junior async/await и Task спрашивают часто обновлено
Чем опасен async void
Вопрос
Почему async void используют только для обработчиков событий?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Его нельзя дождаться, а исключение из него может уронить процесс. У async void нет Task, который можно ожидать: вызывающий не знает, когда метод закончится, и не может поймать его исключение.
Варианты ответа
- Его нельзя дождаться, а исключение из него может уронить процессправильный ответ
async voidвыполняется синхронно до конца, как обычный методasync voidнельзя вызвать из обычного синхронного методаasync voidвсегда выполняется в UI-потоке через контекст
Разбор
У async void нет Task, который можно ожидать: вызывающий не знает, когда метод закончится, и не может поймать его исключение. Необработанное исключение пробрасывается в SynchronizationContext или в пул потоков, где обычно завершает процесс. Выполняется он так же, как async Task, вызвать его можно откуда угодно. Для событий другой сигнатуры нет, поэтому там async void допустим, но внутри нужен try/catch.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.