异步编写Socket客户端,我不再使用Connect与Send,而使用了BeginConnect与EndConnect、BeginSend与EndSend,将具体的操作放到了Begin时指定的回调函数里。
需要注意的点:
1.程序在Begin后直接返回,以BeginConnect为例,在服务端确定连接时才调用指定的ConnectCallBack函数。
2.在每个Begin指定的回调函数里,总是需要有一个对应的End操作,在End操作之后,才是真正得完成了对应的操作,每个Begin只能被End一次。
3.用到了ManualResetEvent对象。MSDN上的解释是“通知一个或多个正在等待的线程已发生事件”,我的理解是一个用于多个线程之间同步用的信号对象。Reset()让接下来的代码运行到WaitOne()时暂停,直到收到一个Set(),代码才会继续往下执行。在这里我们