これは私が確認するためだけのものです、私はこれを正しく理解しました:
IDisposalパターンを実装する大規模なリソースクラスがあります。これは、(設計上)複数回呼び出されるように実装する必要があります(もちろん、正確に1回呼び出そうとしても)。また、バックアップと同様に、Dispose()メソッドも呼び出すファイナライザーを実装します。手動で呼び出された場合、Dispose()はGC.SuppressFinalize(this)も呼び出します。
周りの処分パターンのいくつかの例があります。それらのほとんどは、破棄コードの最後でGC.SuppressFinalize(this)を呼び出します。クリーニングの前に、Dispose()メソッドの先頭で呼び出す方がよいと主張する人もいます。後で主張しますが、これにより、クリーンアップ中にGCがファイナライザーを同時に呼び出さないことが確実になります。
質問:
GC.SuppressFinalizeを最初に配置しても、それ以上の効果はないようです。まだ競合状態がありますよね?では、代わりにスレッドセーフな方法でDispose()を実装する必要があるというのは本当ですか?