C # финализаторы не гарантированно будут вызываться в любое конкретное время.Их не следует принимать за деструкторы C ++.
Если вы хотите гарантировать предсказуемое удаление, внедрите IDispose и создайте экземпляр своего класса в блоке using:
using (Power power = new Power())
{
// blah blah
}
Если блок using не практичен, внедрите IDispose - вынужно написать метод Dispose, который избавляется от любых ресурсов, которые вам нужно выпустить;все точные требования см. в сети MSDN и явно вызовите Dispose () в соответствующее время.Если вы многопоточны, для этого может потребоваться некоторый код синхронизации, чтобы это не произошло слишком рано.