如果在c#中的catch()中有一个返回值,那么a中的代码最终会被执行吗?

如果在c#中的catch()中有一个返回值,那么a中的代码最终会被执行吗?,c#,try-catch-finally,C#,Try Catch Finally,我有以下代码片段/示例。我写这段代码不是为了问一个关于catch,finally和return的问题: try { doSomething(); } catch (Exception e) { log(e); return Content("There was an exception"); } finally { Stopwatch.Stop(); } if (vm.Detail.Any()) { return PartialView("Question

我有以下代码片段/示例。我写这段代码不是为了问一个关于catch,finally和return的问题:

try
{
    doSomething();
}
catch (Exception e)
{
    log(e);
    return Content("There was an exception");
}
finally
{
    Stopwatch.Stop();
}
if (vm.Detail.Any())
{
    return PartialView("QuestionDetails", vm);
}
else
{
    return Content("No records found");
}

据我所知,如果try块中有异常,它将被捕获。但是,如果catch中有一个return语句,那么最终会执行吗?这是编写catch和finally的正确方法吗?

是的,
finally
将被执行,即使您
返回了以前的内容

finally块用于清理try块中分配的任何资源,以及运行即使try块中发生异常也必须执行的任何代码。通常,finally块的语句在控件离开try语句时执行,无论是由于正常执行、执行break、continue、goto或return语句,还是由于异常从try语句传播而发生控制权转移

更多信息
即使在
catch
块中有返回,也将执行
finally

始终执行最终块

在已处理的异常中,保证关联的finally块 要运行。但是,如果未处理异常,则执行 最后,块取决于异常展开操作的方式 触发。这又取决于计算机的设置方式。 有关详细信息,请参阅


Ref:

在退出catch块后,
最终将执行(在您的示例中,通过显式“返回”)。但是,finally块之后的所有内容(在您的示例中,
if(vm.Detail.Any())…
)将不会执行。

尽管catch块中有return语句,finally块中的代码仍将运行。 但是,我个人会将结果分配给一个变量,并在块之后返回它。
但这只是品味的问题。

谢谢-那么finally是在返回之前执行还是异步执行?finally将首先执行。