Вы не столкнетесь с какой-либо тупиковой ситуацией при вызове GC.Collect
и GC.WaitForPendingFinalizers
, если только вы не обращаетесь к управляемым объектам в ваших Finalize
методах. Вызов методов других объектов с общедоступной областью действия может потенциально привести к непредсказуемым результатам, включая тупик. Причина в том, что вы не полностью контролируете шаблоны блокировки этих других объектов. Он может быть заблокирован любым пользователем, пока ваш метод финализатора пытается получить к нему доступ.
Кроме того, явная блокировка this
в финализаторе почти гарантированно приведет к тупику, как показывает ответ LukeH. Вы можете прочитать оригинальную статью Джеффри Рихтера об этом здесь .
Как правило, вы должны высвобождать неуправляемые ресурсы только в ваших финализаторах, что должно устранить любые подобные опасения по поводу взаимоблокировок.