I am reading the "Disposal and Garbage Collection" chapter of book C# 8.0 in a Nutshell. When it comes to finalizers, it says:
The GC identifies the unused objects for deletion, those without finalizers are deleted immediately, those with pending finalizers are kept alive and are put onto a special queue. When the garbage collection is complete and your program continues executing, the finalizer thread then starts running in parallel to the program, picking objects off that special queue and running their finalization methods.
Does this paragraph mean that an object waiting for finalization need to be collected by the GC again? I assumed it already been detected as garbage by GC, why does it need to be collected after finalization again?