3

在 C#.NET 中,我们来看下面的例子

[WebMethod]
public int TakeAction()
{
    try {
        //Call method A
        Return 1;
    } catch (Exception e) {
        //Call method B
        Return 0;
    } finally {
        //Call method C
    }
}

现在假设方法 C 是一个长期运行的过程。

调用 TakeAction 的客户端是在调用方法 C 之前,还是在调用/完成之后取回返回值?

4

2 回答 2

10

首先计算返回值,然后执行 finally 块,然后将控制权传递回调用者(使用返回值)。如果返回值的表达式将被 finally 块更改,则此顺序很重要。例如:

Console.WriteLine(Foo()); // This prints 10

...

static int Foo()
{
    int x = 10;
    try
    {
        return x;
    }
    finally
    {
        // This executes, but doesn't change the return value
        x = 20;
        // This executes before 10 is written to the console
        // by the caller.
        Console.WriteLine("Before Foo returns");
    }
}
于 2013-10-23T21:29:05.830 回答
2

finally 块中的任何内容都会在离开 try 块后执行。在您的情况下,它返回 1 或 0,然后执行方法 c。有关 try-catch-finally 的更多信息,您可以参考

于 2013-10-23T21:30:53.530 回答