C#Web服务-返回然后最终返回-首先发生什么
在C#NET中,让我们以下面的例子为例C#Web服务-返回然后最终返回-首先发生什么,c#,asp.net,.net,web-services,try-finally,C#,Asp.net,.net,Web Services,Try Finally,在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是一个长期运行的过程
[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之前还是在调用/完成它之后返回返回值?首先计算返回值,然后执行最后一个块,然后将控制传递回调用方(带有返回值)。如果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");
}
}
finally块中的任何内容都是在离开try块后执行的。在您的例子中,它返回1或0,然后执行方法c。
有关try catch finally的更多信息,请参考返回1,然后执行方法C。。。。。这篇文章的另一个答案正好相反。。。。。已计算返回值--最终执行--然后,将控件传递回调用方。。。。。不确定该相信什么=\n不,控件在方法C之后返回给调用方。这可能是您的意思,但从您的回答中不清楚。@adam:如果有疑问,请相信Jon Skeet。但关键(在这个答案中没有明确说明)是,直到最后一个块被执行之后,控制才会返回给调用者。是的。控件在执行方法c后返回,但返回值在try块中设置,并且不会更改。如果我指示错误,请道歉。此外,即使在最后一个块之前[评估]返回。。。。我的主要问题是找出调用方在什么时候收到返回/响应?在finally执行之前还是之后?@adam:在finally块执行之后-这就是我所说的“控制权被传递回调用方”的意思。检查这一点很容易——只需运行我展示的代码。它将在打印10之前打印“在Foo返回之前”。当然可以,谢谢Jon!我想这对Web服务也是一样的吗?@adam:是的。它是语言的一个基本部分,对于任何用途都是一样的。