我想从其他实例的终结器访问没有终结器的对象。
我知道从终结器访问其他可终结对象是个坏主意,因为终结器调用的顺序是不确定的。
但是如何从其他对象的终结器访问没有终结器的实例呢? 我想不通,只能在文章中找到 http://edn.embarcadero.com/article/29365 :
This means that finalizers should never access other finalizable objects (objects without finalizers, however, are just fine)
MSDN 中对此有任何确认吗?
目前我想获取类型为object
的变量的锁对象,但我想确保它是正确的并且object
实例在访问它之前没有从内存中释放.
谢谢
最佳答案
Currently I want to acquire lock object with variable of type object
在终结器中访问该对象没问题,它没有任何反应。实际上使用 lock 语句,这不太好。阻塞终结器线程往往会导致字节错误。它在程序退出时有超时,它必须在两秒内完成并完成所有操作。您无法承受 Monitor.TryEnter() 来避免触发该超时,这将是严重的资源泄漏。
注意代码味道,当其他线程仍然可以访问它时,您不应该释放您为终结器编写的任何 native 资源。终结器只有在没有人保留对对象的引用时才能运行,这是福音。这也应该意味着锁定不再有任何意义,因为没有线程可以再有引用。当没有人可以读取或写入时,无需使用锁来保护共享状态。
请记住,实际编写终结器往往几乎总是错误的, native 资源应由其相应的 .NET 包装器类终结。有很多,低级的是SafeHandle的派生类。
关于c# - 从终结器访问不可终结的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17210071/