С# finalizer throwing exception?

Цитата из MSDN:

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

Но если у меня есть:

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

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

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

Ответы

Ответ 1

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

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