我下载了一个简单的Tcp异步聊天室的例子,里面的代码差不多是这样:{
someDelegate d=new someDelegate(...);
IAsyncReuslt r=d.BeginInvoke(...);
while(!r.IsComplete){
thread.sleep(250);
}
d.EndInvoke(...);
}
我想问一下,实际写代码时beginInvoke和EndInvoke是在同一个代码块中的么?还有,这个聊天室服务器,来一个Client就开一个线程,这样好不好?小型通信程序和大型通信程序是不是都这样做?

解决方案 »

  1.   

    晕,还有这种烂代码。我建议你看看关于使用 xxxResetEvent 阻塞方式的代码,那个也比这种一个while循环的好太多了。产品级异步根本不是这样写的。这个是一个刚刚通过看msdn、看网上的点滴文章,开始写通讯程序的人的代码。
      

  2.   

    异步很简单。例如var message=......;
    gateWay.SendMessage(message, callback);这就发完了。而callback则可能是public void callback(ReceiveInfo data)
    {
         .....
    }当有信息返回来的时候,才开始进行处理。而这个代码跟Send时的代码往往不是在一个线程上的。程序一旦执行完SendMessage语句,然后就“该干什么还干什么去”,而根本不会进行信号量阻塞,更谈不上弄个while循环啦。
      

  3.   

    随便给你找了一个msdn的页面,可以看看什么才是“异步发送”。http://msdn.microsoft.com/zh-cn/library/ms145136.aspx