关于C#的socket的异步连接和异步接收的问题

hgq1207 2015-01-12 04:16:49
想请问下,当调用socket的BeginConnect方法时发生了什么?什么情况下需要使用BeginConnect?
...全文
228 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
腻害的小笼包 2015-01-13
  • 打赏
  • 举报
回复
Begin*** 这样的方法都是异步方法,区别于同步方法,这种方法不会阻塞当前线程,可以调用 End*** 去同步结束这个方法,也可以通过注册事件来得到方法完成的通知。
WM_JAWIN 2015-01-12
  • 打赏
  • 举报
回复
BeginXXXX,只是分配分配线程,EndXXXX才会真正执行相关任务。
於黾 2015-01-12
  • 打赏
  • 举报
回复
因为是异步的,所以你没法确定系统到底什么时候去调用,有可能立即使用了线程池中一个空闲线程去调用,也可能线程池已满,要等到其他线程执行完毕才会被调用. 回调函数当然是在执行完毕才被执行的,EndConnect只是告诉系统,不再异步执行,改为同步执行后续代码.
hgq1207 2015-01-12
  • 打赏
  • 举报
回复
引用 2 楼 Z65443344 的回复:
所有的异步方法(beginconnect,beginaccept,beginrecieve),都是将操作添加进队列里等待系统线程池调用 可能会使用当前线程在空闲时调用,也可能开启另一个线程执行,总之它区别于"同步阻塞",并不等待执行完毕就继续执行后续代码了
多谢回答。请问是否当调用Beginconnect时就向远程主机发送了连接请求,还是执行完Beginconnect以后,由系统在某一时刻去向远程主机发送连接请求?如果是后者,那么系统在什么时候发送这个连接请求,回调函数又是什么时候被系统调用的呢?EndConnect被调用就能说明连接成功了吗?
於黾 2015-01-12
  • 打赏
  • 举报
回复
所有的异步方法(beginconnect,beginaccept,beginrecieve),都是将操作添加进队列里等待系统线程池调用 可能会使用当前线程在空闲时调用,也可能开启另一个线程执行,总之它区别于"同步阻塞",并不等待执行完毕就继续执行后续代码了
bdmh 2015-01-12
  • 打赏
  • 举报
回复
你想接收数据,就要先链接,等待链接成功,再接收

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧