为什么 Silerlight 生成的 WCF 代理类只提供异步调用?
在某些情况下,我并不真正需要异步模式(例如在 BackgroundWorker 中)
编辑:有时我需要处理两个 WCF 调用的结果。如果我可以等待(应用程序的业务允许)两个调用结束然后处理..但是不......异步!:P
为什么 Silerlight 生成的 WCF 代理类只提供异步调用?
在某些情况下,我并不真正需要异步模式(例如在 BackgroundWorker 中)
编辑:有时我需要处理两个 WCF 调用的结果。如果我可以等待(应用程序的业务允许)两个调用结束然后处理..但是不......异步!:P
据我了解,这里的目的是让人们很难做错事(从 UI 同步 IO)。如果您使用的是 WCF 类,您可能不得不忍受它。
实际上有一个技术原因你不能进行同步调用,至少来自“主”浏览器线程,即浏览器在同一个线程上调用所有插件 API 调用,所以如果 SL 在等待网络回调,网络回调无法通过,应用程序将死锁。也就是说,如果从不同的线程启动同步 API 将正常工作 - 即,如果应用程序首先执行 QueueUserWorkItem 以脱离浏览器线程 - 但我们认为提供同步选项并仅拥有它会令人困惑工作一些时间。
Andrei,即使使用异步模式,也有一些方法可以让您编写富有表现力的代码,易于阅读和维护,而不会因为 4 个异步请求而变得疯狂,只需简化您编写代码的方式。看看这个库http://syncwcf.codeplex.com/