WCF中同步和异步通讯总结

    其实挺忙的, 但我这个人以前习惯不太好, 不肯花时间把平时想到的分析到的东西用文字总结一下, 总是认为记在脑子里就好了, 可是咱本来就挺笨, 挺爱忘记事情的, 经常是以前明明解决了的和想明白的问题再次碰到又要苦想一番. 所以现在决心宁愿放着手中的事情不做, 天塌下来也要总结总结!

    异步方法的本质就是将任务放到另外一个线程上执行, 不过这么简单的概念放到WCF这种分布式环境中你就必须要注意了, 而且要严重注意.

    总结一下, 我这样分个类: WCF中, 以同步、异步角度考虑通讯的方式分为四种:跨进程同步、跨进程异步、发送队列端同步、发送队列端异步。之所以造成这样的结果源于两个因素,一个是传统概念上的同异步,一个是对于WCF方法自定义属性OperationContract中IsOneWay是True还是False的选择。

    记住下面的结论:

    “当一个WCF服务方法IsOneWay配置为False时,当你用同步方法调用它时,他就是“跨进程同步”的,你的当前线程最终会被设置为等待,直到对方执行完毕或者抛出异常,将执行完的信息返回调用端后,你的当前线程才能被恢复,从而继续执行,对应的异步方法是与他的同步方法对应的,这不用多说。当一个WCF服务方法IsOneWay配置为True时(注意:只能设置在没有返回值的方法上),当你用同步方法调用它时,它就是“发送队列端同步”的,你的当前线程同样最终会被设置为等待,但只要能在一定的时间内和对方正确连接上,并将方法参数无误的发过去,你的当前线程便会恢复执行,而不需等待对方任何执行结果(什么结果?执行完毕或者异常信息),同样,“发送队列端异步”也是与之对应的,这也不用多说。”

    例子代码我实在没时间写了,希望对此感兴趣的自己去建个例子,自己试验试验。WCF虽然上手容易,不过涉及的东西其实很多,在实际开发的时候你会时不时遇到各种“意想不到”的意外,所以平时就关注一些细节问题显得很重要。

原文地址:https://www.cnblogs.com/WYB/p/1225836.html