Если вы создаете одноразовый объект, который имеет исходящую ссылку на ваши объекты, но не имеет входящих ссылок, т.е.
new MyGcMonitor(this); // don't store result
И если вы убедитесь, что в MyGcMonitor есть Finalizer (деструктор), то этот финализатор будет вызван после завершения процесса GC в отдельном потоке.
Финализатор может вызвать метод, чтобы сообщить, что ваш класс завершен.
Самое сложное, если вам это нужно снова, например, если вы решили не освобождать свой объект. Затем вам нужно настроить последовательность, которая вне запущенного потока GC создает другой экземпляр MyGcMonitor. Я полагаю, вы могли бы использовать Delegate.invoke и в этом делегате сначала вызовите GC.WaitForPendingFinalizers ().
В случае воскрешения MyGcMonitor возникнет аналогичная проблема, связанная с удалением (статической) ссылки в дальнейшем.