为什么Silverlight添加服务参考 使用eventing而不是IAsyncResult?

nla*_*ker 0 silverlight wcf asynchronous service-reference

Ye Olde添加Web引用会对使用事件的服务生成XXXAsync调用,以通知呼叫者呼叫已完成.

在WPF或控制台应用程序中添加服务引用,当被告知生成异步操作时,使用IAsyncResult设计模式(BeginXXX和EndXXX操作).我的理解是,这通常被认为是可用性和灵活性的一个进步 - 您可以使用回调,您可以通过调用EndXXX在任何时间点开始阻止,您可以对等待句柄进行分组并阻止一组操作,你可以投票等

为什么Silverlight中的ASR不使用IAsyncResult?我的猜测是因为设计人员想要非常清楚地表明事实上需要完全异步性,并且如果他们使用了IAsyncResult设计模式,那么尝试只需调用Begin然后紧跟End就太容易了.对于一个可能被大约100%的新开发者或者没有很好地掌握异步的人所击中的绊脚石.

Eil*_*aee 5

Silverlight团队提供了对基于事件的异步模式的即时访问,因为它是一种更易于使用的方法(但灵活性要低得多).例如,事件在显示线程中触发,允许开发人员不愿意考虑他们的线程模型而忘记它.

如果您需要更好的灵活性(就像我一样),也可以为Silverlight提供Begin/End异步模式.事实上,基于事件的生成代码基于IAsyncResult.

生成的Channel接口定义了开始/结束方法,您可以使用通道工厂来获取接口的可用实现.