Каково определение / пример исключения, которое не может быть обработано (вне рамок исключений)? - PullRequest
0 голосов
/ 09 июня 2011

Как сказано, исключение должно быть перехвачено, только если оно может быть обработано, что является примером исключения, которое не может быть обработано (за исключением таких вещей, как OOM, BadImageFormat и т. Д.).

У меня сложилось впечатление, что зарегистрированное исключение - это исключение, которое было обработано или означает, что обработка означает выполнение каких-либо корректирующих действий (например, если сетевой ресурс не работает, попробуйте создать резервный общий ресурс или смонтировать другой, и т.д.)?

Примеры исключений, которые могут и не могут быть обработаны с благодарностью.

Спасибо

Ответы [ 2 ]

1 голос
/ 09 июня 2011

Обработка (для меня) означает принятие соответствующих мер для возобновления потока вашего приложения.Если вы сбросите исключение, то вы не обработали его.Ведение журнала может быть одним из случаев, когда вы можете выбросить исключение.

Пример исключения, которое можно обработать: вы запускаете службу, которая уведомляет определенного пользователя о событии.Вы пытаетесь использовать веб-службу для отправки SMS-сообщения, это дает исключение (сервер отключен, учетная запись закрыта и т. Д.), Поэтому в качестве запасного варианта вы отправляете сообщение электронной почты, которое завершается ошибкой с другим исключением, поэтому вы пытаетесь вернуться к попыткесделать голосовой вызов.Это успешно, и ваш клиент получает уведомление обо всем, что он хотел бы знать.

Пример исключения, которое иногда может обрабатываться, а иногда нет: вы получаете исключение Недостаточно памяти системы.Иногда вы знаете, что у вас есть блокировка на что-то большое, но некритическое, которое вы можете отпустить, а затем повторить попытку, но обычно все, на что вы активно ссылаетесь, - это то, что должно иметься, и в этом случае вы ничего не можете реально сделать.do to recovery.

Обратите внимание, что довольно часто обработка означает просто возвращать false для функции, которой было предложено что-то сделать и для которой возвращается успех / сбой.Это не так бесполезно, как может показаться на первый взгляд, рассмотрите следующий сценарий: вы вносите изменения в файл, а затем говорите приложению сохранить изменения.Диск переполнен или недоступен по какой-либо причине.Любой из них вызовет исключение.При сохранении у вас isDirty = savefile (), исключение происходит внутри savefile и «обрабатывается» savefile, устанавливая результат в false.Это позволяет приложению знать (и показывать пользователю), что файл не был сохранен.

0 голосов
/ 09 июня 2011

Помимо ключевых исключений платформы, которые не могут быть перехвачены CLR (StackOverflow, OutOfMemory и т. Д.), Существует несколько исключений, которые, как правило, не следует отлавливать, поскольку они представляют ошибки разработчика, которые следует устранять во время разработки. Хотя регистрация исключений может рассматриваться как механизм «обработки» исключения, это полезно, только если файлы журналов проверяются на наличие ошибок.

Как правило, исключения, такие как ArgumentNullException, ArgumentException, NullReferenceException и т. Д., Не должны явно отслеживаться разработчиками, и им следует разрешать всплывать, чтобы их можно было идентифицировать и исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...