У меня есть такой тестовый код:
public class A : CriticalFinalizerObject
{
~A()
{
File.WriteAllText("c:\\1.txt", "1z1z1");
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
throw new Exception();
}
}
Сначала я попытался запустить его, не производя A из CriticalFinalizerObject. Финализатор не вызывался после завершения этой программы. Это меня удивило, так как я думал, что это более детерминировано, но ладно. Затем я прочитал о CriticalFinalizerObject, которые гарантируют, что их финализаторы будут вызваны. Я вывел из него букву А. Угадай, что. До сих пор не выполняется. Что я делаю/понимаю неправильно?
(Пожалуйста, не пишите очевидные вещи о том, что сборщик мусора недетерминирован, я это знаю. Это не так, поскольку программа закончилась, и я представил себе, что смогу безопасно очистить после хорошего необработанного управляемогоисключение.)