有效地等待多条消息

时间:2018-07-15 09:24:47

标签: c# performance synchronization task messaging

假设您有一个客户端和服务器通过某种消息总线进行通信,该消息总线具有以下接口:

interface IBus {
   void Send(Message m);
   void Receive(Message m);
}

Message是这样的POCO:

class Message {
   public Guid Id {get;set;}
   public string Data {get;set;}
}

因此,您可以通过Send发送消息,并且当响应到达时,消息传递基础结构将调用Receive方法,该方法本质上只是一个回调。我现在想做的是编写一个方法,让我等待响应

Message WaitForResponse(Message request);

并像这样使用它:

var response = WaitForResponse(request);
Console.Write(response.Data);

我尝试使用TaskCompletionSource并很好用,但是它需要async\await,并且我已经用这种同步样式编写了很多代码。这段代码现在使用ManulResetEventSlim中存储的ConcurrentDictionary个对象进行同步,但是当等待响应的请求数量增加到数百个时,它会遇到性能问题(我想是因为所有线程都被{ {1}})。我想应该有一个更好的方法来做到这一点,该方法只需要更改manualResetEventSlim.Wait()的实现,并保持所有方法签名不变

0 个答案:

没有答案