试试finally块

时间:2014-11-12 13:24:43

标签: c# try-finally

try
{
    operation1();
    operation2();
    ...
}
finally
{
    try
    {
        finalizer_operation1();
        finalizer_operation2();

    }
    finally
    {
        very_critical_finalizer_operation_which_should_occurs_at_the_end();
    }
}

这可以吗?要将终结器作为另一个try/finally块(因为finalizer_operationX()可能会抛出,我必须确保very_critical...()将在最后发生。

快速搜索尝试在finally块中什么都没带(如果你给我一个重复的链接会删除问题),应该工作,但我不确定设计和可能存在的问题。

2 个答案:

答案 0 :(得分:9)

我不会这样编写代码。我不喜欢嵌套try / catch / finally构造。我更喜欢每种方法一种。

我的偏好是用自己的方法包装每个调用。

try
{
    operation1();
    operation2();
    ...
}
finally
{
    cleanup();
}

public void cleanup() {
    try
    {
        finalizer_operation1();
        finalizer_operation2();

    }
    finally
    {
        very_critical_finalizer_operation_which_should_occurs_at_the_end();
    }
}

答案 1 :(得分:2)

当然是。如果控制流进入相应的finally块,则try执行。

唯一的例外是关闭VM的调用。