以下面的代码为例:
try
{
Response.Redirect(someurl);
}
finally
{
// Will this code run?
}
finally块中的代码会运行吗?
答案 0 :(得分:12)
是
试一试,看看!
答案 1 :(得分:6)
足够简单,可以测试:
try
{
Response.Redirect(someurl);
}
finally
{
File.WriteAllText("C:\\Temp\\test.txt", "The finally block ran.");
}
答案 2 :(得分:6)
它会运行。 Response.Redirect实际上会抛出一个ThreadAbortException,这就是为什么之后的代码不能运行的原因(当然 finally 块中的任何代码除外)。
答案 3 :(得分:4)
确实如此。请参阅此MSDN文章:Finally always executes
答案 4 :(得分:3)
你为什么不试试呢?
finally
始终运行,但在这些极端情况下除外:
答案 5 :(得分:3)
finally中的代码将运行,但它将在重定向之前运行,因为重定向将不会被发送到浏览器,直到方法返回,并且finally代码将在之前执行方法返回。
答案 6 :(得分:3)
试试这个:
try
{
Response.Redirect("http://www.google.com");
}
finally
{
// Will this code run?
// yes :)
Response.Redirect("http://stackoverflow.com/questions/3668422/will-code-in-finally-run-after-a-redirect");
}
答案 7 :(得分:2)
是。保证运行finally
中的代码,除非发生灾难性事件。
答案 8 :(得分:2)
是。以下是如何检查我是否正确的方法。只需在最后放置一个消息框或向控制台写一些内容,您就可以得到答案。
答案 9 :(得分:2)
一般规则是最终的代码将在所有情况下应用(try / catch)