UDP 接收数据同步 异步选择问题

erosna erosna 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
同步加线程
使用事件并发处理接收到的数据
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();
}

同步加线程接收效率明显高于异步
这样的情况下使用异步还有优势吗?


...全文

相关推荐

评论 24
收藏 已收藏
分享
返回顶部
erosna
C# 111,129 成员 642,540 内容