C#“最终”块是否总是执行?

考虑以下代码C#代码。是否执行“最终”块?


public void DoesThisExecute() {

   string ext = "xlsx";

   string message = string.Empty;

   try {

      switch (ext) {

         case "xls": message = "Great choice!"; break;

         case "csv": message = "Better choice!"; break;

         case "exe": message = "Do not try to break me!"; break;

         default:

            message = "You will not win!";

            return;

      }

   }

   catch (Exception) {

      // Handle an exception.

   }

   finally {

      MessageBox.Show(message);

   }

}

哈,写完这些之后,我意识到自己可以在Visual Studio中自己测试一下。但是,请随时回答!


繁花如伊
浏览 362回答 3
3回答

白猪掌柜的

不,不是的。只要应用程序仍在运行,它将始终执行(FastFail异常,MSDN链接除外,就像其他提到的一样)。退出块的try / catch部分时将执行。如果应用程序崩溃,它将不会执行:通过kill process命令等被杀死。这非常重要,因为如果您编写绝对希望其运行的代码(例如手动执行回滚),否则将自动执行提交,您可能会遇到应用程序在此之前中止的情况。老实说,这是一种外部情况,但是在这些情况下要注意这一点很重要。

HUH函数

从MSDN C#规范中try声明:一的语句finally在控制离开块总是被执行try的语句。这是真实的,控制传送是否发生正常的执行结果,作为执行的结果break,continue,goto,或return语句,或作为关于传播异常出的结果try说明。在某些情况下,finally块将不执行:环境失败不可捕获的异常类型电源(检测)失败
打开App,查看更多内容
随时随地看视频慕课网APP