Что такое пункт ошибки в системе исключений CLR? - PullRequest
3 голосов
/ 10 апреля 2009

Я читал эту статью об обработке искаженных состояний и наткнулся на то, что меня озадачило.

Что такое пункт о неисправности?

См. Цитату из статьи ниже:

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

Система исключений будет раскручиваться состояние каждого кадра на вызове стек между где исключение поднял и где это будет обработано (известный как второй проход). Как стек раскручивается, CLR будет работать как пункты finally и пункты ошибки в каждый кадр как размотан. Затем условие catch в кадре обработки выполняется.

Ответы [ 2 ]

6 голосов
/ 10 апреля 2009

Согласно этой статье :

Другим примером предложения SEH, недоступного на языке C #, является предложение неисправности. Это похоже на предложение finally, за исключением того, что оно вызывается только тогда, когда в защищаемом блоке было сгенерировано исключение.

Другая статья подтверждает:

Обработчик исключений ошибки похож на блок finally, за исключением того, что он вызывается только в том случае, если связанный с ним блок try оставлен в результате исключения. После того, как обработчику ошибок была предоставлена ​​возможность выполнить, исключение продолжается в процессе поиска или обработчик, который хочет его перехватить.

2 голосов
/ 10 апреля 2009

Предложение fault является предложением, которое является частью CLI, но недоступно в C #. Это очень похоже на предложение finally, за исключением того, что оно вызывается только тогда, когда в блоке try было сгенерировано исключение (тогда как блок finally выполняется независимо от того, было ли выброшено исключение).

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