CLR异常系统中的fault子句是什么?

时间:2009-04-10 16:37:51

标签: .net exception clr

我正在阅读this article处理损坏的状态异常,我遇到了令我困惑的事情。

什么是错误条款?

参见以下文章的引用:

  

错误情况只能从中传递   包含意外的函数   条件到该函数的调用者。   例外有权通过   函数执行结果   当前函数的范围   堆栈中的每一帧直到它   到达知道如何的框架   处理意外情况。该   CLR的异常系统(称为   双程异常系统)提供   每个前任的例外   线程的调用堆栈,从头开始   与来电者一同前往   一些功能说它会处理   例外(这被称为第一个   通过)。

     

然后异常系统将展开   呼叫中每个帧的状态   异常所在的堆栈   提出并将在哪里处理   (称为第二遍)。作为   堆栈展开,CLR将同时运行   最后的条款和错误条款   每个框架都解开了。然后,   处理框架中的catch子句是   执行。

2 个答案:

答案 0 :(得分:6)

根据this article

  

C#语言中没有的SEH子句的另一个例子是fault子句。它类似于finally子句,除了它只在被保护块中抛出异常时才被调用。

Another article确认:

  

故障异常处理程序与finally块类似,只是在它作为异常的结果而保留了相关的try块时才调用它。在为错误处理程序提供执行机会之后,异常会在搜索中继续进行,或者是一个愿意捕获它的处理程序。

答案 1 :(得分:2)

fault子句是CLI的一部分,但在C#中不可用。它与finally子句非常相似,只是在try块中抛出异常时才会调用它(而无论是否抛出异常,都会执行finally块)