GC.Collect появляется, чтобы запустить сборку мусора в фоновом потоке, а затем немедленно вернуться. Как я могу запустить GC.Collect синхронно - т.е. Дождаться завершения сборки мусора?
Это в контексте тестов NUnit. Я попытался добавить параметр gcConcurrent в свой файл app.config для тестовой сборки, и я попробовал то же самое с nunit.exe.config. Не было никакого эффекта - когда я отлаживаю, я все еще вижу, что финализатор запускается в "потоке Finalizer GC", а не в потоке, который называется GC.Collect (NUnit "TestRunnerThread" ), и оба потока работают одновременно.
Справочная информация. Я хочу, чтобы мои тесты терпели неудачу, если они протекают (не вызывают Dispose on) определенного класса. Поэтому я добавил финализатор к этому классу, который устанавливает статический флаг wasLeaked; то мой тест TearDown вызывает GC.Collect(), а затем бросает, если wasLeaked - true. Но это не детерминистично, потому что, когда он читает wasLeaked, финализатор обычно даже не вызывается. (Вместо этого он не выполняет более поздний тест, после завершения сборки мусора).