Как правило, не поймать System.Exception
. Это плохая идея и плохой запах кода, указывающий на неспособность понять цель исключений. Я считаю, что это результат веры разработчика, что исключения являются ошибкой, а не кодом, который вызвал исключение.
Я постоянно вижу этот сбой в рабочем коде, и он неизменно маскирует реальные ошибки, поскольку допустимые и полезные исключения перехватываются и проглатываются, оставляя приложение в плохом состоянии. Это делает намного более сложным, чтобы отследить основную причину сбоя.
Поймать исключения, используя метод, который вы использовали здесь, более или менее правильный способ сделать это. Есть несколько вещей, которые вы можете улучшить, хотя:
Обычно не рассматривайте ArgumentNullException
или ArgumentOutOfRangeException
как сбой сети во время выполнения (если это не так). Скорее, это следует рассматривать как логическую ошибку, которая приводит к сбою вашей программы как можно быстрее (чтобы вы могли проверить это с помощью отладчика как можно ближе к точке сбоя). Это часто означает, что вы вообще не поймаете ArgumentException
.
Подумайте об изучении иерархии исключений, чтобы найти подходящее базовое исключение, которое охватывает исключения, о которых вы пытаетесь сообщить. Например, (я не искал это), предположим, что три из все ваши исключения получены из SocketException
. Вы могли бы сохранить некоторую типизацию, поймав SocketException
вместо трех отдельных исключений. Однако делайте это только в том случае, если вы сообщаете о всех исключениях сокетов. (Это в основном более дисциплинированная версия вашей первоначальной попытки просто поймать Exception
)
Поскольку обе строки в каждом обработчике исключений идентичны, вы можете создать функцию для выполнения этих двух строк в одной строке обработчика . Типичный рефакторинг "не повторяй себя". Если вы хотите изменить способ сообщения об исключении, подумайте, насколько проще было бы изменить одну функцию, чем все эти отдельные обработчики.
Практически любой значимый ввод / вывод (на ум приходят сеть и файл) повлечет за собой довольно значительную цепочку обработчиков исключений только потому, что так много всего может пойти не так. Просмотр большого количества сообщений об ошибках, связанных с вводом / выводом, которые могут дать сбой, не является анти-паттерном, но это может быть хорошим запахом кода. Как запах свежей сосны или свежеиспеченный хлеб. :)