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)及更高版本不会调用终结器作为应用程序终止的一部分。
全部,
我有一个 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)及更高版本不会调用终结器作为应用程序终止的一部分。