Выбор ответа Middle Делегаты и события обновлено
Исключение в одном из подписчиков
Вопрос
У события три подписчика. Второй бросает исключение. Что будет при обычном вызове Changed?.Invoke(...)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Первый выполнится, исключение уйдёт вызывающему, третий не выполнится. Мультикаст-делегат вызывает методы последовательно в обычном цикле.
Варианты ответа
- Первый выполнится, исключение уйдёт вызывающему, третий не выполнитсяправильный ответ
- Все три выполнятся, исключение будет проглочено
- Выполнятся первый и третий, исключение попадёт в
AggregateException - Ни один не выполнится: делегат сначала проверяет всех подписчиков
Разбор
Мультикаст-делегат вызывает методы последовательно в обычном цикле. Исключение второго прерывает вызов, третий не получит событие, а исключение полетит в код, вызвавший событие. Ничего не собирается в AggregateException. Если нужна изоляция подписчиков, вызывают каждого из GetInvocationList() в своём try/catch.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.