但是BeginAccept和EndAccept不就是system.net.socket封装好的异步socket吗
如果用多线程来实现的话那就不叫异步了吧
1、再次强调,异步是目的,多线程是手段。
所谓异步是和同步的概念相对的。所谓同步,即“发出一个功能调用时,在没有得到结果之前,该调用就不返回。”也就是必须一件一件事做,等前一件做完了才能做下一件事。异步则与之相反。
为了异步,可以通过多种方式来实现,多线程就是其中一种方式。但是要注意的是,异步可以通过多线程来实现,但用了多线程的不一定就是异步。就好为了实现“解渴”这种目的,可以用“喝水”这种手段;但用了“喝水”这种手段,其目的不一定是为了“解渴”,也可能是“吃咸了解咸”、“漱口”等等。
所以“如果用多线程来实现的话那就不叫异步了”的说法是完全错误的。
2、BeginAccept 就是一种 AsyncCallback Method(委托回调方法),Socket 类提供的回调方法本身就用到了 ThreadPool 类,所以 BeginAccept 本质上就是一种多线程。这种方法的缺点是不能管理线程,缺省的最大并发数只有 25,而且回调写的不好主线程很容易阻塞。
3、比较好的方法是自己写线程池来管理线程用 socket.Accept 实现。
[Reference]
http://blog.csdn.net/awinye/article/details/537264
http://blog.csdn.net/kingfox/article/details/7233350