2 c#
请注意以下代码:
class CTestFinally
{
public static void Run()
{
try
{
TryAndTry();
}
catch (Exception exError)
{
Console.WriteLine(exError.Message);
}
finally
{
Console.WriteLine("Finally...!");
}
Console.ReadKey();
}
static void TryAndTry()
{
try
{
TryAndTry();
}
catch (Exception exError)
{
Console.WriteLine(exError.Message);
}
finally
{
Console.WriteLine("Try: Finally...!");
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
最后从未执行因为我们得到堆栈溢出错误.
除了上述问题之外,还有哪种情况下finally块不会被执行?
StackOverflowException是CLR主机通常专门处理的少数几种异常之一.例如,ASP.NET将终止工作进程.这是非常难以调试,因为您的应用程序只是消失.我确信SQL Server有类似的策略(比如卸载appdomain).
原因是这是一个不稳定的情况,不允许可靠的错误恢复(在你的所有堆栈都无法使用之后!例如,你可以不调用你的记录器或发送电子邮件.堆栈上没有空间.).
另一种是OutOfMemoryException(你甚至不能分配一个Exception - 这就是CLR预先分配一个OOM实例的原因......).我认为ASP.NET容忍这一点,而SQL Server会杀死你的appdomain.
对于正常的例外,这很好.
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |