代码之家  ›  专栏  ›  技术社区  ›  noob.spt

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

  •  3
  • noob.spt  · 技术社区  · 16 年前

    Here here ,这两个链接都谈到了调用Web服务并等待响应,这也是我在异步实现时看到的一个总体趋势。

    我不明白“为什么我们需要等待服务电话回来”?而且,如果我们正在等待,为什么不进行同步调用呢。“异步调用后等待”和“同步调用”有什么区别?

    5 回复  |  直到 16 年前
        1
  •  4
  •   Robert Harvey    16 年前

    为了有用,异步调用需要在你做其他事情的同时做它自己的事情。有两种方法可以做到这一点:

    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."

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

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

    返回结果。

    换句话说,如果你使用 WaitOne WaitAny 在返回多个结果的异步web服务上,您可以从web服务调用中获得单个结果,以及 .

        2
  •  3
  •   TJB    16 年前

    异步调用的一个非常实用的用途是这样的

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

    如果你想在等待“服务器”做某事的同时更新你的UI,你需要进行异步调用。 如果你进行同步调用,你的代码将陷入等待状态,但如果你进行异步调用,你可以在等待回调的同时更新UI,甚至让用户去做其他事情。这超出了UI的范围,您可以进行异步调用以启动一些非关键任务并继续执行代码,如果结果不重要,您甚至可能不注册回调。

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

        3
  •  1
  •   Chris Patterson    16 年前

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

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

    因为您的应用程序代码不是 阻塞 等待web服务响应,您可以利用这段等待时间来造福用户。

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

        4
  •  1
  •   Brian Rasmussen    16 年前

    您链接到的第一个示例发出异步调用,然后立即等待结果。除了将作业分叉到另一个线程之外,据我所知,这与同步调用之间几乎没有区别。

    然而,另一个例子谈到了同时执行多个异步调用。如果是这样的话,启动所有调用然后等待是有意义的,因为这些调用可能会并行执行。

        5
  •  0
  •   Peter Kelly    14 年前

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

    推荐文章