c# - C# "finally" block 是否总是执行?

标签 c# try-catch

<分区>

Possible Duplicate:
Will code in a Finally statement fire if I return a value in a Try block?

考虑以下代码 C# 代码。 “finally” block 是否执行?

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 中自己测试它。但是,请随时回答!

最佳答案

不,它没有。如果应用程序仍在运行,它将始终执行(除了在 FastFail 异常期间, MSDN link ,如其他人所述)。它将在退出 block 的 try/catch 部分时执行。

如果应用程序崩溃,它将不会执行:通过 kill process 命令等被杀死。这非常重要,因为如果你编写的代码绝对希望它运行,比如手动回滚,如果不是其他明智的它会自动提交,您可能会遇到应用程序在此之前中止的情况。老实说,这是一种外部情况,但在这些情况下注意这一点很重要。

关于c# - C# "finally" block 是否总是执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3216046/

相关文章:

c# - Log4net - 记录到错误的附加程序

java - 如何进入下一次迭代

java - Exception 的 catch 子句中包含什么

python 尝试,除了来自未显式导入的模块的错误

c# - 添加 UITabBarController 时出错

C# If not (this) Or (this) or (this) - 多条件 IF/OR

c# - 通过 devenv 为 C# 解决方案指定额外的条件编译符号

c# - 如何创建 SQL Server Compact 3.5 .sdf 文件并连接到它?

php - 如何捕获函数 "include"PHP 的错误?

php - 返回,内部或外部尝试/捕获?