终结器 C#。为什么 Finalizer 不调用?

Poz*_*hil 3 c# destructor finalization

为什么我的终结器没有被调用?

using System;

class Program
{
    static void Main(string[] args)
    {
        Test test = new Test();
    }
}

class Test
{
    public Test()
    {
        Console.WriteLine("Start");
    }   

    ~Test()
    {
        Console.WriteLine("End");
    }
}
Run Code Online (Sandbox Code Playgroud)

我在网上搜索了一下,没有找到合适的。我期待最后控制台输出“End”。

Jon*_*eet 8

进程终止时不需要执行所有终结器。终结器不应该用于绝对必须发生的事情。

如果您确实愿意,可以调用GC.WaitForPendingFinalizers()- 以及其他GC.方法来首先提示垃圾收集 - 但在生产代码中这样做通常是有问题的设计的标志。终结器并不是为了以这种方式工作而设计的。一般来说,它们在 C# 代码中应该极其罕见;根据我的经验,它们通常用于记录“您似乎没有处理掉这个,而您确实应该这样做 - 最终会进行清理,但这是应该更迫切地清理的事情”的警告。