ГХ очищает только те объекты, которые «недоступны».
Класс, в котором выполняется код, все еще «достижим», потому что его указатель this
находится в стеке. Таким образом, пока выполняется утилизация, финализатор вызываться не будет.
Так что не имеет значения, если вы позвоните SuppressFinalize
в начале или в конце.
Как указано ниже в комментариях, реализация CLR, по-видимому, не гарантирует того, что ваш объект не получит / завершит сборку мусора во время выполнения методов экземпляра. Единственная возможная «надежная» ссылка, поддерживающая работу объекта, - это та, которая используется для вызова метода объекта, но я не знаю достаточно о внутренних элементах JIT, чтобы делать заявления об этом, и его поведение может измениться.
Я оставляю здесь ответ для доступа к обсуждению ниже.