想不明白,在红色处,点解.唉.好难

1. public void ClientRead(IAsyncResult h)// (这是异步读取的回调函数)
2 {
3 NetworkStream stream = this.GetStream();// 获得流
4 TcpServerBase.ExecuteRead(stream, h, Buffer, Container, AsyncExecution, OnMessage, OnError);
5 try
6 {第4行的调用中(13行),完成了异步读取,为何第7行又开启一个读取?

7 stream.BeginRead(Buffer, 0, Buffer.Length, ClientRead, Buffer);
}
}
8 public static void ExecuteRead(NetworkStream stream, IAsyncResult h, byte[] buffer, List<byte> container,
9 bool AsyncExecution, OnMessageEventHandler onMessage, OnErrorEventHandler onError)
10 {
11 try
12 {
13 var len = stream.EndRead(h);// 异步读取的结束 会返回一个整数,表示字节数组长度
14 for (var i = 0; i < len; i++)// 将这些字节加入到集合中
15 container.Add(buffer[i]);
16 ExecuteCommand(stream, container, AsyncExecution, onMessage, onError);
}
}
------解决思路----------------------
每调用一次读取都只会返回一次,要继续读就要不断地调用.
------解决思路----------------------
一次读取后,继续准备第二次读取
------解决思路----------------------
异步完成一次就停止了,下一次,需要你主动执行
------解决思路----------------------
完成一个异步读取说明数据已经取完了 这个对吗?
不见得吧?如果传输的数据大于缓冲区呢
BeginRead 执行后,内部线程一直是休眠的,直到被操作系统的中断唤醒
所以你没有必要担心性能问题
相反,同步读取时人为制造的循环等待才是消耗资源的