С# finalizer throwing exception?
Цитата из MSDN:
Если Finalize или переопределение Finalize выдает исключение, среда выполнения игнорирует исключение, завершает этот метод Finalize и продолжает процесс финализации.
Но если у меня есть:
~Person()
{
throw new Exception("meh");
}
то это приводит к исключению во время выполнения?
p.s. Я знаю, что этого никогда не должно произойти, однако мне просто интересно об этом поведении. У одного из наших клиентов была пустая попытка поймать все их финализаторы.. он даже не регистрировался, когда что-то пошло не так или перепроверило объект:/
Ответы
Ответ 1
Важное значение имеет ссылка на источник вашей цитаты. Я должен предположить, что он говорит о старой версии .NET, возможно, версии 1.x. Он пытался быть "терпимым" к необработанным исключениям, проглатывая их без писк. Это не сработало хорошо, куски кода, которые безуспешно терпят неудачу, чрезвычайно трудно отлаживать.
Версия .NET 2.0 положила конец этому, по умолчанию CLR-хост завершает приложение для любого необработанного исключения. Исключение в финализаторе является фатальным.