在读取已经接收到的少量数据时,我尝试比较同步和异步方法的性能。所以我发送数据并确保它正在等待接收套接字(相同的程序)。
source.Send(sendBuffer);
while (target.Available != sendBuffer.Length)
Thread.Sleep(50);
SocketAsyncEventArgs arg = new SocketAsyncEventArgs();
arg.Completed += AsyncCallback;
arg.SetBuffer(receiveBuffer, 0, sendBuffer.Length);
if(target.ReceiveAsync (arg))
{
//Pending request
//999 out of 1000 times we end up here
}
令我惊讶的是,ReceiveAsync 调用几乎从未同步完成。我会假设 ReceiveAsync 会同步返回并且执行速度与 Receive 一样快,但由于它几乎从未发生过,我无法判断。我对 ReceiveAsync 的期望在这里错了吗?
如果有足够的可用字节,最好总是先检查 target.Available 并执行 Receive 吗?这种使用 ReceiveAsync 而不是 BeginReceive 会破坏一些好处,这就是我写这个问题的原因。