首页 新闻 会员 周边 捐助

请教:C#SocketAsyncEventArgs中(xxxAsync返回值)的理解

0
悬赏园豆:15 [已解决问题] 解决于 2020-09-28 12:04

目前在学习socket通讯的SocketAsyncEventArgs应用,对于ReceiveAsync、SendAsync得(Boolean)返回值理解很是疑惑,请大神们留步费心讲解一下:
查找文献: SocketAsyncEventArgs调用适当的套接字方法 (xxxAsync) 以启动异步操作;如果异步套接字方法 (xxxAsync) 返回 true,则在回调中查询上下文属性来获取完成状态;如果异步套接字方法 (xxxAsync) 返回 false,则说明操作是同步完成的。 可以查询上下文属性来获取操作结果。
疑问如下:
1(xxxAsync) 已经是异步操作了,为什么 有“(xxxAsync) 返回 false,则说明操作是同步完成的”的说法呢?这个同步是什么意思呢? 2(xxxAsync) 返回 false情况下要同步执行回调方法
  bool willRaiseEvent = socket.ReceiveAsync(saea); //继续异步接收消息
  if (!willRaiseEvent)
  {
    MethodName(saea);
  }
而我在园子里找的大神的代码都是 利用Completed 事件,如下(此法貌似是返回为true的情况)
SocketAsyncEventArgs RecieveSAE = new SocketAsyncEventArgs();
byte[] buffer = new byte[2048];
RecieveSAE.SetBuffer(buffer, 0, buffer.Length);
RecieveSAE.Completed += new EventHandler<socketasynceventargs>(RecieveSAE_Completed);
clientSk.ReceiveAsync(RecieveSAE);
这两种 应用环境到底区别在哪里呢?

由于基础知识薄弱,处于个人自学阶段,请大仙们留步多讲几句,谢谢

rossi努力努力的主页 rossi努力努力 | 初学一级 | 园豆:8
提问于:2020-09-18 21:10
< >
分享
最佳答案
0

你调用ReceiveAsync时数据可能已经接受到缓冲区了,某些骚操作后数据直接可以给你,所以同步完成了,Send也一样。

收获园豆:15
56180825 | 小虾三级 |园豆:1749 | 2020-09-19 22:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册