【问题标题】:Do this will call finally?这最终会调用吗?
【发布时间】:2013-06-20 07:21:56
【问题描述】:

假设我有这个代码。如果异常是 InvalidData,这样做会调用 finally 来清理资源。

while(CanWork){
            try
            {
                 ....
            }
            catch (InvalidDataException e)
            {
                LogAction(false, e.Message, e.StackTrace);
                break;
            }
            catch (Exception e)
            {
                LogAction(false, e.Message, e.StackTrace);
            }
            finally
            {
                if (insta != null)
                {
                    insta.Disconnect();
                    insta.Dispose();
                    insta = null;
                }
            }
          }

【问题讨论】:

  • “Finally”块总是会调用,不管你有没有异常。
  • 我的意思是在第一次捕获时我会中断一段时间,而在中断之前会最终调用?
  • using 可能会容易得多,注意,但简单的答案:“是”
  • 已给出多个答案。

标签: c# try-catch finally


【解决方案1】:

是的,它会,但不是在它即将离开的时候,而是在try or catch中的代码执行完之后。

【讨论】:

    【解决方案2】:

    当然可以。 finally 块总是被执行。详情请参考link

    【讨论】:

    • 小心“总是”——在很多情况下它不会;好的,这些都是非常病态的场景,过程非常糟糕——但它们是真实的。更简单:如果电源关闭,它将无法运行finally
    • @MarcGravell 你能否让我知道所有这些场景或参考一个链接,这对我非常有帮助
    • 涉及线程中止或快速退出的场景,可能是某些安全异常或内存不足的场景;诸如此类的事情-讨厌的事情
    猜你喜欢
    • 2021-05-27
    • 2012-03-02
    • 2012-12-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    相关资源
    最近更新 更多