Проблема с перехватом всех исключений состоит в том, что вы можете ловить те, которые вы не ожидаете, или те, которые вы должны не ловить. Дело в том, что исключение любого рода указывает на то, что что-то пошло не так, и вы должны разобраться с этим, прежде чем продолжить, иначе вы можете столкнуться с проблемами целостности данных и другими ошибками, которые не так легко отследить.
Чтобы привести один пример, в одном проекте я реализовал тип исключения, называемый CriticalException. Это указывает на состояние ошибки, которое требует вмешательства разработчиков и / или административного персонала, в противном случае клиенты получают неверный счет или могут возникнуть другие проблемы с целостностью данных. Он также может быть использован в других подобных случаях, когда просто регистрировать исключение недостаточно, и необходимо отправить оповещение по электронной почте.
Другой разработчик, который неправильно понимал концепцию исключений, затем обернул некоторый код, который потенциально может вызвать это исключение, в общий блок try ... catch, который отбросил все исключения. К счастью, я заметил это, но это могло привести к серьезным проблемам, особенно из-за того, что «очень необычный» угловой случай, который он должен был поймать, оказался гораздо более распространенным, чем я ожидал.
Таким образом, в общем, перехват общих исключений плох, если вы не уверены на 100%, что точно знаете , какие исключения будут выбрасываться и при каких обстоятельствах. Если вы сомневаетесь, пусть они всплывают в обработчике исключений верхнего уровня.
Подобное правило здесь никогда не выбрасывает исключения типа System.Exception. Вы (или другой разработчик), возможно, захотите перехватить ваше конкретное исключение выше стека вызовов, позволяя другим проходить через него.
(Однако есть один момент, на который следует обратить внимание. В .NET 2.0, если поток встречает какие-либо неперехваченные исключения, он выгружает весь домен приложения. Так что вы должны заключить основное тело потока в общую попытку ... catch заблокируйте и передайте все исключения, обнаруженные там, в ваш глобальный код обработки исключений.)