多线程批处理队列

时间:2012-11-25 05:32:22

标签: c# multithreading .net-3.5 queue tcplistener

我目前正在编写一个TCP侦听器,它有许多客户端应用程序向其发送短消息。我拥有的TCP侦听器是一个C#winform,我需要做的是批量处理这些日志,以避免在我在队列中收到的每条消息上访问数据库。目前,在我在侦听器中收到的每条消息中,我都使用C#Queue Class进行排队。

如果有任何排队的项目,将每5分钟执行一次单独的线程来检查此队列并开始处理队列。这个设计似乎存在并发/竞争条件问题,因为当5分钟线程开始时,接收到的新消息无法再访问Queue,因为我在DeQueue期间锁定了它。因此,这些新消息会丢失。它似乎只在有大量消息发送到TCP侦听器时才会发生。

有人认为这对我来说是一个有缺陷的设计还是会有更好的解决方案呢?我不允许根据发送消息的客户端应用程序的限制来使用MSMQ或WCF。

1 个答案:

答案 0 :(得分:0)

所以你有一个生产者 - 消费者场景,有多个生产者和一个(缓冲的)消费者。您可能需要查看Reactive Extensions(他们有.NET 3.5的版本)。至少,您可以利用BlockingCollection<T>的反向移植。

相关问题