首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >异常处理:在抛出后最终执行?

异常处理:在抛出后最终执行?
EN

Stack Overflow用户
提问于 2009-10-16 09:20:15
回答 4查看 12.2K关注 0票数 18

假设您有以下代码:

而不是做:

代码语言:javascript
运行
复制
Try
    '
    ' Initialize some objects
    '

    '
    ' do something that fails
    '

    '
    ' Clean up-code that gets not reached because exception
    '
Catch e As Exception
    '
    'Clean up initialized objects
    '

    Throw e
End Try

我想做的是:

代码语言:javascript
运行
复制
Try
    '
    ' Initialize some objects
    '

    '
    ' do something that fails
    '
Catch e As Exception
    Throw e
Finally
    '
    'Clean up initialized objects
    '
End Try

所以我的简单问题是:在发生异常的情况下,是否到达了finally块,即使有抛出之前的一些行?

EDIT感谢您的快速回答。

在第一行将会有NullReference-,COM-和FileNotFound-异常。

好的,我将使用下面的代码:

代码语言:javascript
运行
复制
Try
    '
    ' Initialize some objects
    '

    '
    ' do something that fails
    '
Catch e As Exception      ' or just "Catch"??        
    Throw
Finally
    '
    'Clean up initialized objects
    '
End Try

万事如意!

Inno

EN

回答 4

Stack Overflow用户

发布于 2009-10-16 09:26:00

不,不能保证它会运行。有一些例外--例如StockOverflowException和OutOfMemoryException --在这些情况下,finally块的执行不能得到保证。

票数 5
EN

Stack Overflow用户

发布于 2009-10-16 09:26:00

在几乎所有的情况下,Finally都会在Try/Catch块中执行(值得注意的例外情况包括发生StackOverflowException或OutOfMemoryException时)。我很好奇,为什么你不亲自尝试一下呢?学习东西的一个有价值的方法是亲自尝试--毕竟,你最终可能会接受一个错误或误导性的答案,从那时起,你就会在这个错误中苦苦挣扎。

票数 1
EN

Stack Overflow用户

发布于 2009-10-16 10:27:39

注意: System.Environment.FastFail方法是立即杀死当前进程/线程,而不是执行最终部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1577049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档