From .NET 2.0 and on, An unhandled Exception thrown in a Finalizer causes the process to terminate if the default policy is not overridden.
To my understanding, a Finalizer is not an expected location where an Exception should be thrown. I think it is possible for a Dispose()
method not to have been called for an unexpected reason (Thread abort, ...) from which a clean recovery is still possible, provided that the Finalizer executes properly.