Это правда, что это может быть очень плохо - исключить исключение из вашего метода dispose, тем более что материал, который реализует IDisposable, обычно указывает финализатор, который будет вызывать Dispose.
Проблема заключается в том, что если устранить проблему под ковром, обработав исключение, у вас могут возникнуть очень сложные для отладки ситуации . Что если ваш IDisposable выделил критическую секцию, которая освобождается только после утилизации. Если вы игнорируете тот факт, что произошло исключение, вы можете оказаться в тупике центрального. Я думаю, что сбои в утилизации должны быть одним из тех случаев, когда вы хотите потерпеть неудачу рано, поэтому вы можете исправить ошибку, как только она обнаружена.
Конечно, все зависит от того, на каком объекте вы находитесь, некоторые объекты вы можете восстановить, другие нет. Как правило, Dispose не должен генерировать исключения при правильном использовании, и вам не нужно защищаться от кодирования вокруг исключений во вложенных методах Dispose, которые вы вызываете.
Вы действительно не хотите смести исключение OutOfMemoryException под ковер?
Если бы у меня был хитрый сторонний компонент, который произвольно выдавал исключения на Dispose, я бы его исправил И разместил в отдельном процессе, который я мог бы разрушить, когда он начал воспроизводиться.