Understanding Garbage Collection in .NET
stackoverflow.com
stackoverflow.com
In general, it's not a good idea to use GC-triggered finalizers the same way you would use destructors in C++. They aren't guaranteed to be called at any particular time, or even to be called at all. Use try ... finally instead.
Just about the only valid use of a GC-triggered finalizer is to release a native resource associated with the object (a native heap object, a file descriptor, etc.).
Admittedly, I didn't even read the question and just thought the answer was quite interesting, regardless of the context.
When they interplay with JITs, everything gets even more complex and fascinating.