Не делай этого. Это плохая идея.
Цель «Утилизация» состоит в том, чтобы вежливо утилизировать неуправляемый ресурс как можно раньше, чтобы другие процессы могли его использовать. «Dispose» не должен иметь семантику - он не должен изменять состояние вашей программы или быть каким-либо образом обязательным. Он должен делать только то, что говорит: распоряжаться ресурсом .
Должны ли вы сделать это в финализаторе? Абсолютно нет . Это еще хуже. Финализатор может вообще не работать, финализатор работает в другом потоке, финализатор может быть вызван, даже если объект не был должным образом инициализирован, и так далее. Написание финализатора почти никогда не является правильным решением, и если вы действительно пишете финализатор, он должен распоряжаться только ресурсом. Не делайте ничего сложного в финализаторе; почти наверняка вы напишете опасно неправильную и хрупкую программу.
Правильный принцип, на который следует обратить внимание: если вызов требуется по семантическим причинам, тогда вынудите пользователя ввести вызов в код. Если он забудет это сделать, он узнает в тестировании. Пусть пользователь решит, правильно ли делать вызов в конечном блоке или нет. Не принимайте это решение за него; Вы можете ошибиться.