If I implement a destructor in a class, Foo, instances of Foo are tracked closely on the finalization queue. When an instance of Foo is garbage collected, I understand that the CLR sees the entry in the finalization queue and gives that object special treatment by moving the object off the heap and into the finalization reachable table. Then... nothing else happens for that garbage collection cycle?
Will finalize() always be called during the next garbage collection cycle?
Why isn't finalize called immediately after copying my object to the freachable table? (this seems like extra unnecessary complexity)