Этот код работает, заставляя финализатор для leakDetector
вызывать Debug.Fail, поэтому вы видите проблемы в отладчике, когда этот объект завершается.
Помещая вызов SuppressFinalize (..) в метод Dispose (), он вызывает тот объект, который вызывает Debug.Fail только тогда, когда Dispose НЕ вызывается.