我正在浏览WebServices上的MSDN文档。 Here和here,这两个链接都讨论了调用Web服务并等待响应,这也是我在异步实现时看到的一般趋势。
我不明白“为什么我们需要等待服务电话才能返回”?而且,如果我们在等待为什么不进行同步通话。 “asynch call after wait”和“同步调用”之间有什么区别?
答案 0 :(得分:4)
为了有用,异步调用需要在您执行其他操作时执行其操作。有两种方法可以做到这一点:
Periodically check the asynchronous handle to see if its status has changed to "completed."
你不会使用WaitHandle来做这两件事。但是,WaitHandle类使客户端可以进行异步调用并等待:
WaitHandle.WaitOne
),WaitHandle.WaitAny
)或WaitHandle.WaitAll
)返回结果。
换句话说,如果您在返回多个结果的异步Web服务上使用WaitOne
或WaitAny
,则可以从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之前的类似自定义模式),您可以创建一个看似同步但可以轻松取消的操作。