我需要能够随时从服务器异步接收消息。但是,我也想使用同步套接字;当我发送消息时,我想阻止,直到收到回复。同步和异步是不是相互配合好,还是会出问题?
换句话说,我BeginReceive()
习惯于异步监听。如果我打电话Receive()
(我理解的同步版本),下一条传入的消息会被 Receive 回调、BeginReceive
回调、两者、都不接收,还是更糟?
这将发生在客户端,服务器可以保持 100% 异步。
是的,这是完全可能的,诀窍是将异步行为隐藏在“似乎”以同步方式运行的包装器中。对于网络库 NetworkComms.Net ,这里有一篇关于这样做的文章。
免责声明:我是这个库的开发人员。
同步和异步能很好地相互配合吗?
不,一般来说,他们在一起玩得不好。
这并不是说它永远无法完成,但它有时是不可能的,而且通常令人困惑且难以处理。除非您有令人信服的理由不这样做,否则我建议您只使用其中一个。
来自 MSDN:
BeginReceive:“开始从连接的 Socket异步接收数据。”
所以我想说,即使 BeginReceive 是从 Socket 类派生的,它也是为了接收异步数据,因为 Receive 方法用于从绑定的 sock 中同步检索数据。