这几乎只是为了确保我做对了:
我们有一个实现 IDisposal 模式的大型资源类。它应该(通过设计)以某种方式实现,使其能够被多次调用(即使我们尝试准确地调用它一次)。我们还实现了一个终结器,它也调用 Dispose() 方法 - 就像备份一样。如果手动调用,Dispose() 也会调用 GC.SuppressFinalize(this)。
周围有几个处置模式的例子。他们中的大多数人在处理代码的末尾调用 GC.SuppressFinalize(this) 。有人声称,最好在 Dispose() 方法的开头调用它,然后再进行任何清理。后者争辩说,这将确保 GC 不会同时调用终结器,而我们仍在清理。
问题:
似乎将 GC.SuppressFinalize 放在开头并没有更好的效果?我们还有比赛条件,对吧?那么,我们宁愿以线程安全的方式实现 Dispose() 是真的吗?