Я занимаюсь разработкой довольно обширной системы в .NET, которая включает в себя много системного программирования. Чаще всего я использую шаблон IDisposable для обработки удаления ресурсов, но иногда это не применимо (или пропущено по ошибке), и ресурс уничтожается во время Finalize (). Это может произойти в COM-взаимодействии или когда деструктор вызывает Dispose (), и внутри него есть исключение.
В основном: не всегда возможно ясно увидеть и обработать каждый сценарий, когда финализатор может бросить. И когда это произойдет, приложение наверняка завершится сбоем.
Причина, по которой меня беспокоит именно этот класс проблем, заключается в том, что финализаторы не вызываются потоком, который создал или использовал объект, поэтому практически невозможно связать исключение с контекстом, в котором этот объект был. создано. Все, что вы получаете, это какой-то общий поток GC.
Итак, вопрос для общественности сейчас : если вы отвечаете за подобные проблемы, что вы делаете, чтобы их контролировать? Отметить объекты? Использовать сторонний инструмент, который позволяет отслеживать эти проблемы?
Кроме того: возможно ли вызвать какое-то глобальное событие «бросок финализатора», чтобы хотя бы зарегистрировать, что именно эта проблема произошла?
РЕДАКТИРОВАТЬ1 : Большое спасибо всем, кто представил ценный вклад, я думаю, что теперь я несколько яснее о том, что нужно сделать. Последнее, что я действительно хотел бы получить из этого обсуждения, - это если кто-то знает методологию запуска кода при исключении в финализаторе (даже если сбой приложения все еще неизбежен), чтобы я мог, по крайней мере, регистрировать его без необходимости изменять деструктор каждого класс.