我正在为一个朋友检查一些代码,并说他在try-finally块中使用了return语句。即使try块的其余部分没有触发,Finally部分中的代码仍然会触发吗?

例子:

public bool someMethod()
{
  try
  {
    return true;
    throw new Exception("test"); // doesn't seem to get executed
  }
  finally
  {
    //code in question
  }
}

当前回答

引用自MSDN

Finally用于保证执行语句代码块,而不管前面的try块是如何退出的。

其他回答

通常情况下,是的。finally部分保证执行发生的任何事情,包括异常或返回语句。该规则的异常是线程上发生的异步异常(OutOfMemoryException, StackOverflowException)。

要了解在这种情况下异步异常和可靠代码的更多信息,请阅读约束执行区域。

简单的回答:是的。

它也不会触发未捕获的异常,并运行在Windows服务托管的线程中

Finally在运行在Windows服务中的线程中不执行

finally块的主要目的是执行写入其中的内容。它不应该取决于try或catch中发生的任何事情。但是使用System.Environment.Exit(1),应用程序将退出而不移动到下一行代码。

引用自MSDN

Finally用于保证执行语句代码块,而不管前面的try块是如何退出的。