Ye Olde Add Web Reference 生成对服务的 XXXAsync 调用,这些调用使用事件来通知调用者调用已完成。
在 WPF 或控制台应用程序中添加服务引用,当被告知生成异步操作时,使用 IAsyncResult 设计模式(BeginXXX 和 EndXXX 操作)。我的理解是,这通常被认为是可用性和灵活性方面的一个进步——你可以使用回调,只需调用 EndXXX 就可以在任何时间点开始阻塞,你可以分组等待句柄并阻塞一组操作,你可以投票等。
为什么 Silverlight 中的 ASR 不使用 IAsyncResult?我的猜测是因为设计人员想要非常清楚地表明,实际上需要完全异步,如果他们使用了 IAsyncResult 设计模式,那么尝试只调用 Begin 紧跟 End 就太容易了,这会使对于大约 100% 的新开发人员或没有很好地掌握异步的人来说,这是一个绊脚石。