IDisposable 模式 - 当对象存储在线程本地数据中时是否调用 Dispose()?

IDisposable Pattern - Is Dispose() invoked when an object is stored in a Thread local data?

全部,

我有一个 class FileLogger 实现了 IDisposable 模式。这个class的实例存储在当前线程的本地数据中:

LocalDataStoreSlot s;
s = Thread.GetNamedDataSlot("logger");

if (Thread.GetData(s) == null)
    Thread.SetData(s, new FileLogger());

我在 class 上调用 Dispose() 的代码中没有任何地方,但是当进程结束时,不会调用终结器。这是 IDisposable 模式在我的 class:

中的实现
protected virtual void Dispose(bool disposing)
{
    if (!_isDisposed)
    {
        if (disposing)
        {   
        }

            try
            {
                closeFile_();
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex);
            }

        _isDisposed = true;
    }
}

public void Dispose()
{
    Dispose(true);
    GC.SuppressFinalize(this);
}

~FileLogger()
{
    Dispose(false);
}

closeFile_() 方法永远不会被调用(我知道它不会被调用,因为这个方法应该写入文件一些结束 html 标签)。为什么?

正如拉尔夫所指出的:

NET 5(包括 .NET Core)及更高版本不会调用终结器作为应用程序终止的一部分。

Source