2

我需要能够随时从服务器异步接收消息。但是,我也想使用同步套接字;当我发送消息时,我想阻止,直到收到回复。同步和异步是不是相互配合好,还是会出问题?

换句话说,我BeginReceive()习惯于异步监听。如果我打电话Receive()(我理解的同步版本),下一条传入的消息会被 Receive 回调、BeginReceive回调、两者、都不接收,还是更糟?

这将发生在客户端,服务器可以保持 100% 异步。

4

3 回答 3

0

是的,这是完全可能的,诀窍是将异步行为隐藏在“似乎”以同步方式运行的包装器中。对于网络库 NetworkComms.Net ,这里有一篇关于这样做的文章。

免责声明:我是这个库的开发人员。

于 2013-04-18T20:19:03.673 回答
0

同步和异步能很好地相互配合吗?

不,一般来说,他们在一起玩得不好。

这并不是说它永远无法完成,但它有时是不可能的,而且通常令人困惑且难以处理。除非您有令人信服的理由不这样做,否则我建议您只使用其中一个。

于 2013-04-18T18:52:14.793 回答
0

来自 MSDN:

BeginReceive:“开始从连接的 Socket异步接收数据。”

所以我想说,即使 BeginReceive 是从 Socket 类派生的,它也是为了接收异步数据,因为 Receive 方法用于从绑定的 sock 中同步检索数据。

于 2013-04-18T18:52:33.980 回答