<分区>
我正在为旧的照明控制台开发 .NET Core 中的接口(interface),目前正在实现数据包。此接口(interface)/API 的基本思想如下:客户端在一个 UDP 端口上发送其数据包,控制台以错误代码响应。控制台通过另一个 UDP 端口发送它的数据包。
所以当我设计 API 时,我只使用了 Action<ErrorCode>
作为我的回调函数。但是,当一次处理多个数据包时,这种方法不太实用。
我的 UdpClient 在接收数据包时引发了一个事件,但控制台没有返回超过 4 字节的错误代码。
所以我用 SemaphoreSlim
试过了.
我的想法是让发送者等到事件发生,再释放信号量。 问题基本上是这是否是处理此问题的最快和“最干净”的方法:
// The Event-Callback:
private void Sender_Recieve(object sender, ErrorCode e)
{
lastError = e;
semaphore.Release();
}
// The SendPacket method:
public async Task<ErrorCode> SendPacketAsync(Packet packet)
{
// send packet
await semaphore.WaitAsync();
return lastError;
}
那么有没有什么方法可以更快/更好地做到这一点而不损失性能?