C#如何使用Statement转换为Try-finally

Tru*_*die 5 c# using exception try-finally

我试图绕过这个.根据此页面上的Using发言:

using语句确保即使在对象上调用方法时发生异常,也会调用Dispose.您可以通过将对象放在try块中然后在finally块中调用Dispose来实现相同的结果; 实际上,这就是编译器如何翻译using语句.

但是在这个关于Try-Finally块的页面上它说明了:

在处理的异常中,保证运行关联的finally块.但是,如果未处理异常,则finally块的执行取决于如何触发异常展开操作.

那么如果一个Using语句转换Try-Finally为不能保证调用finally语句的语句,如何在异常情况下保证调用Dispose方法?

Jon*_*eet 10

它的行为确实像try/finally一样 - 所以如果应用程序终止,资源可能不会被处理......这通常是可以的,因为通常处理是为了释放进程持有的资源......并且OS会整理那些反正过程死亡.(这并不是说该Dispose方法不会被调用...它与普通的try/ finally.一样.)

显然,如果你在文件系统上有一个"锁定文件"或类似的东西,这将是一个问题 - 但是在断电等情况下你会遇到同样的问题.


Hab*_*bib 5

程序无法恢复的异常,在这种情况下finally块将不会执行.例如,堆栈溢出异常或内存不足异常.