【发布时间】:2012-08-22 14:05:30
【问题描述】:
有一个很好的问题Catch block is not being evaluated when exceptions are thrown from finallys 正在讨论在 finally 块中引发异常的一些有时意想不到的结果。
我想不出你为什么要在 finally 块中抛出异常的任何充分理由。如果之前有异常,它总是会丢失。我一直看到 finally 习惯于以不应该抛出异常的方式进行清理。
谁能解释什么时候在 finally 块中抛出异常合适?
【问题讨论】:
-
finally 内部抛出的异常将被调用者所在的相应 catch 块捕获。但正如秘鲁所说,当它更安全、更清洁时,你为什么还要考虑把事情搞砸呢?最后是收拾烂摊子,不要让它变得更多。
-
你提到的线程从清理代码抛出异常的点开始......不是通过
throw并且与开发人员的期望相反......所以是有一个问题'是否从 finally 块中抛出异常以及何时'?估计不是…… -
在那篇原始帖子stackoverflow.com/questions/12150994/… 中,我给出了一个答案,说要将
finally块的内容包装到try..catch 中,以避免finally 块中出现任何可能的异常......而我仍然认为,应该这样做,如果有人警告 finally 块可能会抛出异常 -
如果 WCF 的人知道这不是从
finally抛出的好主意,也许他们不会添加那个破.Dispose()!
标签: c# exception try-catch-finally