Обработчики уведомлений от наблюдателей действительно никогда не должны пропускать исключения, потому что единственная сущность, которая обычно больше всего заинтересована в исключении, это наблюдатель, который его выбрасывает. Исключение обычно означает, по сути, «я не мог сделать то, что вы просили, потому что X». Наблюдаемый субъект обычно не заботится о том, что обработчики событий что-либо делают, поэтому, таким образом, не будет заботиться, если он не сделает этого. С другой стороны, если исключение означает, что инварианты класса субъекта больше не встречаются, то исключение, вероятно, является неизбежным злом.
Если из обработчика уведомлений выдается исключение, его следует рассматривать довольно серьезно (если это какая-то глупая вещь купола, которая не должна была попасть в обработчик, это должно быть серьезно исправлено). Обычный паттерн событий Microsoft, когда пропускаются все обработчики событий, следующие за первым, генерирующим исключение, очень плох. Гораздо лучшим подходом было бы запустить все обработчики событий, захватывать все исключения по мере их возникновения и добавлять их в список, а затем в конце, если список не пустой, генерировать исключение EventHandlerException, которое содержит список всех исключений, которые произошла при обработке события.