代码最终会在重定向后运行吗?

时间:2010-09-08 13:55:25

标签: c# asp.net

以下面的代码为例:

   try
   {
      Response.Redirect(someurl);
    }
    finally
    {
       // Will this code run?
    }

finally块中的代码会运行吗?

10 个答案:

答案 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 始终运行,但在这些极端情况下除外:

  • 应用程序崩溃或应用程序终止(例如FailFast())
  • 数量有限的严重例外
  • 线程终止(例如,Thread.Abort())
  • 硬件故障(例如机器断电)
  • try-block内的无限循环(最终导致应用程序终止)

答案 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)