當試圖讀取已經收到的少量數據時,我試圖比較同步和異步方法之間的性能。 所以我發送的數據,並確保它正在等待接收套接字(相同的程序)。什麼時候Socket.ReceiveAsync同步返回?
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的期望是否錯誤?
總是首先檢查目標是否會更好?如果有足夠的可用字節,可用並執行接收? 這種類型打破了使用ReceiveAsync而不是BeginReceive的一些好處,這就是爲什麼我要寫這個問題。