3
我目前正在写一个TCP监听器,它有许多客户端应用程序发送短消息给。我所拥有的TCP监听器是一个C#winform,我需要做的是批量处理这些日志,以避免在队列中收到的每条消息都触及数据库。目前,在侦听器收到的每条消息中,我使用C#队列类进行Enqueue。多线程批处理队列
每5分钟执行一个单独的线程来检查此队列,并在有任何排队的项目时开始处理队列。看起来这个设计有一个并发/竞争条件问题,因为当5分钟线程启动时,接收到的新消息不能再访问队列,因为我在DeQueue期间锁定了它。因此,这些新消息会丢失。它似乎只在有大量消息发送给TCP侦听器时发生。
有没有人认为这是我的一个有缺陷的设计,或者会有更好的解决方案吗?我不允许基于发送消息的客户端应用程序的限制使用MSMQ或WCF。
可能看[Queue.Synchronized](http://msdn.microsoft.com/en-us/library/system.collections.queue.synchronized(v = vs.90).aspx) – Prescott
很难说什么问题是没有一些代码。 – Tudor