为什么要等待异步Web服务调用

时间:2009-10-15 03:31:48

标签: c# .net asp.net web-services asynchronous

我正在浏览WebServices上的MSDN文档。 Herehere,这两个链接都讨论了调用Web服务并等待响应,这也是我在异步实现时看到的一般趋势。

我不明白“为什么我们需要等待服务电话才能返回”?而且,如果我们在等待为什么不进行同步通话。 “asynch call after wait”和“同步调用”之间有什么区别?

5 个答案:

答案 0 :(得分:4)

为了有用,异步调用需要在您执行其他操作时执行其操作。有两种方法可以做到这一点:

  1. Provide a callback method for the asynchronous handle, so that it can notify you when it is completed, or

  2. Periodically check the asynchronous handle to see if its status has changed to "completed."

  3. 你不会使用WaitHandle来做这两件事。但是,WaitHandle类使客户端可以进行异步调用并等待:

    • 单个XML Web服务 (WaitHandle.WaitOne),
    • 许多XML Web服务中的第一个 (WaitHandle.WaitAny)或
    • 所有许多XML Web服务 (WaitHandle.WaitAll

    返回结果。

    换句话说,如果您在返回多个结果的异步Web服务上使用WaitOneWaitAny,则可以从Web服务调用中获取单个结果,并且处理它时您正在等待剩余的结果

答案 1 :(得分:3)

异步调用的一个非常实际的用途是像这样的东西

http://i.msdn.microsoft.com/Bb760816.PB_oldStyle%28en-us,VS.85%29.png

如果您想在等待“服务器”执行操作时更新UI,则需要进行异步调用。如果进行同步调用,则代码将为等待,但如果您进行异步调用,您可以更新UI,甚至让用户在等待回调时再做其他事情。这超出了UI,您可以进行异步调用以启动一些非关键任务并继续使用您的代码,如果结果不重要,您甚至无法注册回调。

如果你在等待异步调用时没有做什么,那么它就没用了。

答案 2 :(得分:1)

使用异步调用可以在等待响应时释放应用程序以执行其他操作。由于等待Web服务器响应的时间相当长(在计算机周期中),因此该时间可用于更好的事情,例如显示状态更新或执行其他工作。

例如,如果您有一个执行复杂计算的程序,并且该计算的步骤包括使用来自远程Web服务的一些参考数据。通过在计算开始时异步调用Web服务,继续可以在本地执行的计算部分,然后在可用于完成计算时使用Web服务调用的结果,可以减少总计时间。计算

由于您的应用程序代码未被阻止等待Web服务响应,您可以利用该等待时间为用户带来好处。

另一个原因是缩放,特别是在调用其他Web服务的网站中。通过使用异步页面方法(或任务),IIS可以通过将等待异步Web请求的页面推迟到称为“IO线程”的方式来更有效地扩展应用程序,从而释放主ASP.NET工作线程以提供更多服务网页。

答案 3 :(得分:1)

您要链接的第一个示例是发出异步调用,然后立即等待结果。除了将工作分配到另一个线程之外,就我所知,这和同步调用之间没什么区别。

然而,另一个例子讨论了一次执行多个异步调用。如果是这种情况,启动所有调用然后等待是有意义的,因为调用可以并行执行。

答案 4 :(得分:0)

异步调用后跟等待的一种可能用法是异步操作通常支持取消,而阻塞调用则不支持。结合.NET 4.0中的CancellationToken模式(或.NET4之前的类似自定义模式),您可以创建一个看似同步但可以轻松取消的操作。