C # финализатор выбрасывает исключение? - PullRequest
13 голосов
/ 22 апреля 2010

Цитата из MSDN:

Если Finalize или переопределение Finalize выдает исключение, среда выполнения игнорирует исключение, завершает этот метод Finalize и продолжает процесс финализации.

Еще, если у меня есть:

~Person()
{
throw new Exception("meh");
}

тогда это приводит к исключению времени выполнения?

p.s. Я знаю, что этого никогда не должно случиться, однако мне просто любопытно, как это происходит. У одного из наших клиентов была пустая попытка перехватить все их финализаторы ... он даже не регистрировал, когда что-то пошло не так, или повторно исправлял объект: /

1 Ответ

22 голосов
/ 22 апреля 2010

Важно указать источник вашей цитаты. Я должен предположить, что речь идет о старой версии .NET, возможно, версии 1.x. Он пытался быть «терпимым» к необработанным исключениям, проглатывая их без писка. Это не сработало, куски кода, которые молча терпели неудачу, чрезвычайно трудно отлаживать.

Версия .NET 2.0 положила конец этому, хост CLR по умолчанию закрывает приложение для любого необработанного исключения. Исключение в финализаторе смертельно.

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