这基本上只是为了确保我没有错:
我们有一个实现IDisposal模式的大型资源类。根据设计,它应该以一种允许它被多次调用的方式实现(即使我们当然只尝试调用一次)。我们还实现了一个终结器,该终结器也调用Dispose()方法-作为备份。如果手动调用Dispose(),则Dispose()也将调用GC.SuppressFinalize(this)。
有几个处置模式的示例。其中大多数在处理代码的末尾调用GC.SuppressFinalize(this)。有些人声称,在任何清理之前调用它会更好。后者认为,这样可以确保GC在我们仍在清理时不会并发地调用终结器。
问题:
看起来,在开头放置GC.SuppressFinalize并没有做得更好?我们仍然有竞争条件,对吗?那么是否真的应该使用线程安全的方式实现Dispose()呢?
GC.SuppressFinalize
。这个准则在微软内部进行了广泛讨论,最终形成了这样的模式。 - Steven