Финализатор не вызывается во время сбора в вашем примере, потому что он все еще находится в корне в финализируемой очереди. Однако он запланирован для финализации, что означает, что он будет собран во время следующей сборки мусора.
Если вы хотите убедиться, что экземпляры типов с финализатором собраны, вам нужно сделать две коллекции, подобные этой.
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
Но обычно вы не должны вызывать метод Collect()
самостоятельно.