Какая ваша предпочтительная альтернатива - молча проглотить исключение? Мне бы это совсем не понравилось.
События - это просто способ реализации шаблона наблюдателя, действительно. Если слушатель выдает исключение, я бы абсолютно ожидал, что это исключение будет возвращено вызывающей стороне. Любое другое поведение, которое я могу придумать, будет эффективно рассматривать исключение как неважное. Весь смысл исключений в том, что когда что-то идет не так, вы узнаете об этом быстро и неявно. Вы должны явно обрабатывать исключения, чтобы вы не пошли своим веселым путем в испорченном состоянии, не осознав этого.
Вы правильно указываете, на чьей ответственности лежит обработка исключений. Вообще говоря, я считаю, что лучше всего предположить, что почти все может вызвать исключение в любое время. Кроме особых случаев, когда я знаю, что может возникнуть конкретное исключение , и я могу обработать его , я обычно не ловлю исключения, кроме как на верхнем уровне - за исключением, возможно, для переноса и повторного выброса или регистрации и повторного выброса.
Теперь возможно, что один из ваших обработчиков событий действительно не должен выдавать исключение - что они на самом деле не столкнулись с ошибкой - но что должно произойти, если это вполне разумное исключение, которое указывает на серьезную проблему? Несмотря на то, что аварийное завершение программы является уродливым, зачастую это лучше, чем продолжать работать со сбоями некоторых из них, возможно, повреждать постоянное состояние и т. Д.
По сути, я не думаю, что поле CS / SE еще обрабатывает ошибки "правильно". Я даже не уверен, что - это элегантный способ сделать правильную вещь, которую легко выразить во всех ситуациях ... но я надеюсь, что текущая ситуация не так хороша, как сейчас.