c# - 在 finally block 中尝试

标签 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 block (因为 finalizer_operationX() 可能会抛出并且我必须确保 very_critical...() 会发生在最后。

快速谷歌搜索 try in finally block 没有任何结果(如果你给我一个重复的链接将删除问题),它应该工作,但我不确定设计和可能存在的问题。

最佳答案

我不会这样写代码。我不喜欢嵌套 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();
    }
}

关于c# - 在 finally block 中尝试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26888074/

相关文章:

python - finally block 可以知道是否有异常吗

javascript - JavaScript 中的代码finally block 和try ... catch 之后的区别

java - JVM 同步 Finally block

delphi - 进一步澄清 : How to correctly write Try. .Finally ..除了语句?

c# - 将 XML 解析为列表

c# - DataList 列分布

c# - DotNetZip 创建损坏的文件(错误的 CRC)

python - 将整个主循环包装在 try..finally block 中是否合理?

c# - 如何检查参数是否与 C# 中枚举中的值匹配?

c# - ConcurrentBag 与 List 的性能比较