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
, финализатор обычно даже не вызывается. (Вместо этого он не выполняет более поздний тест, после завершения сборки мусора).