C#异步调用(本例中为ASMX WebServices)

时间:2011-11-07 11:42:37

标签: c# .net compiler-construction asynchronous

我和我的同事一直在讨论异步程序。

示例:

ws.GetAllEventsAsync("123", "123");
ws.GetAllEventsCompleted += new awc5ws.events.GetAllEventsCompletedEventHandler(ws_GetAllEventsCompleted);
在这种情况下,

ws 是一项网络服务(asmx)。

现在,第一行代码是否有可能在编译器到达第二行之前执行并完成,因此不会执行回调函数。

所以在这种情况下,在实际执行Web方法之前附加事件处理程序回调会更有意义吗?像这样:

ws.GetAllEventsCompleted += new awc5ws.events.GetAllEventsCompletedEventHandler(ws_GetAllEventsCompleted);
ws.GetAllEventsAsync("123", "123");

我不知道我在这里有多大意义,但我希望你能理解我的观点。如果你能详细而不是肯定或不答案,我将不胜感激。

提前致谢

1 个答案:

答案 0 :(得分:9)

是和是:)

你的第一个例子是竞争条件。如果你运行它,它可能会工作,或者它可能不会。这实际上比没有工作更糟糕。

有时,对ws.GetAllEventsAsync的调用甚至可能同步执行,在这种情况下,错误很明显。当它以异步方式执行时,它可能仍然在主线程附加事件处理程序之前完成,您将错过该事件。