The destructor is called by the garbage collector which runs on a different thread. Custom managed classes never ever use a destructor unless you have unmanaged resources which need to be cleaned up. Never rely on a destructor to do something which should be
in a manually called method. The destructor / finalizer in C# has nothing to do with a destructor in C++.