我目前正在编写一个客户端应用程序,我想知道是否应该使用Socket类的ReceiveAsync方法还是BeginReceive方法。到目前为止,我一直在使用后者,但是我发现它似乎会给CPU带来很大的压力。以下是我的接收循环的基本样式:
private void socket_ReceiveCallback(IAsyncResult result_)
{
// does nothing else at the moment
socket.EndReceive(result_);
byte[] buffer = (byte[])result_.AsyncState;
// receive new packet
byte[] newBuffer = new byte[1024];
socket.BeginReceive(newBuffer, 0, newBuffer.Length, SocketFlags.None,
socket_ReceiveFallback, newBuffer);
}
我一直在想我是否做错了什么,因为其他通信应用几乎不会过多地消耗 CPU。同时我在想,使用 SocketAsyncEventArgs 和 ReceiveAsync 是否会更好。
我的问题如下:
为什么我的循环会如此消耗 CPU? 我应该使用 SocketAsyncEventArgs 和 ReceiveAsync 替代 BeginReceive 吗?