Финализатор не вызывается после необработанного исключения даже с CriticalFinalizerObject

У меня есть такой тестовый код:

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, которые гарантируют, что их финализаторы будут вызваны. Я вывел из него букву А. Угадай, что. До сих пор не выполняется. Что я делаю/понимаю неправильно?

(Пожалуйста, не пишите очевидные вещи о том, что сборщик мусора недетерминирован, я это знаю. Это не так, поскольку программа закончилась, и я представил себе, что смогу безопасно очистить после хорошего необработанного управляемогоисключение.)

7
задан IlyaP 18 May 2012 в 16:09
поделиться