UDP 接收数据同步 异步选择问题
同步加线程
使用事件并发处理接收到的数据
public void SyncRecive()
{
Task listen = new Task(() =>
{
while (true)
{
int length = connect.ReceiveFrom(this.packetBuffer, 0, this.packetBuffer.Length, SocketFlags.None, ref this.remoteEndPoint);
byte[] packet = this.packetBuffer.Unpack(length);
if (length != active.Length || packet.ToMessage() != active.ToMessage())
{
this.counter++;
if (this.ReceiveData != null)
{
this.ReceiveData(packet, this.remoteEndPoint, null);
}
}
}
});
listen.Start();
}
异步
public void AsynRecive()
{
connect.BeginReceiveFrom(this.packetBuffer, 0, this.packetBuffer.Length, SocketFlags.None, ref this.remoteEndPoint, new AsyncCallback(AsynReciveCallback), null);
}
private void AsynReciveCallback(IAsyncResult asyncResult)
{
if (asyncResult.IsCompleted)
{
int length = connect.EndReceiveFrom(asyncResult, ref this.remoteEndPoint);
byte[] packet = this.packetBuffer.Unpack(length);
this.counter++;
if (this.ReceiveData != null)
{
this.ReceiveData(packet, this.remoteEndPoint, null);
}
}
this.AsynRecive();
}
同步加线程接收效率明显高于异步
这样的情况下使用异步还有优势吗?