小编Ner*_*rix的帖子

C#等待事件

我正在.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)

那么,有什么方法可以更快/更好地做到这一点而又不会降低性能?

c# asynchronous asp.net-core

2
推荐指数
1
解决办法
100
查看次数

标签 统计

asp.net-core ×1

asynchronous ×1

c# ×1