我正在.NET Core中为旧的照明控制台开发接口,目前正在实现数据包。此接口/ 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;
}
Run Code Online (Sandbox Code Playgroud)
那么,有什么方法可以更快/更好地做到这一点而又不会降低性能?