Подтвердить что ты не робот

Какие типы исключений не поймать?

Много раз упоминается только об исключениях, которые я могу обрабатывать (бросать, обертывать и/или регистрировать или выполнять некоторые другие действия).

Какие исключения не могут быть обработаны? Разве это то же самое значение, что и не быть пойманным? Я знаю, что исключения, которые могут представлять ссылку на объект как null, не должны быть пойманы, потому что они являются ошибками программирования, а не спровоцированы пользователем. Есть ли другой пример? Другой - ExecutionEngineException.

Также, является ли курс действий в блоке catch всегда только между ретровом, wrap/rethrow и log? Есть ли когда-нибудь случай, когда в блоке catch нужно выполнить некоторые другие действия?

Спасибо

4b9b3361

Ответ 1

Используются обычные рекомендации, только поймите, что вы можете обработать. Там функция утилиты с именем IsCriticalException внутри фреймворка, которая довольно часто используется частями кода рамки для принятия решения о том, следует ли проглатывать исключение. Могло бы это пройти. Он считает следующее критическое:

  • NullReferenceException
  • StackOverflowException (несовместимый)
  • OutOfMemoryException
  • ThreadAbortException
  • ExecutionEngineException (unatchable in 4.0)
  • IndexOutOfRangeException
  • AccessViolationException

Это хороший список.

Ответ 3

Курс действий в блоке catch может не всегда быть ретроном, обертыванием/поиском и журналом. Я видел, где исключение db, как тупик, вызывает исключение, а затем логика catch пытается снова выполнить действие базы данных в надежде, что заблокированный ресурс больше не заблокирован.