3

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

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

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

4

1 回答 1

0

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

于 2012-11-25T12:55:51.043 回答