Недавно я посетил учебные курсы Джеффри Рихтера о .NET. Он упоминает одну стратегию кодирования "Умирание - это потрясающе". То есть, не пишите "catch (Exception ex)" даже в корне цикла программы или события. Если возникло какое-то исключение, которое не обрабатывается, просто дайте процессу умереть.
Я не уверен, что это правильно. Лично я предпочитаю обернуть "try {...} catch(Exception ex) {log and try to recover}
" на верхнем уровне исполнения. На самом деле, ASP.NET не умирает, если какое-либо исключение выбрасывает asXx. Если он умер за исключение, тогда один запрос с серебряной пулей может заставить замолчать всю службу.
Как вы думаете?