【问题标题】:Multithread Batch Queue多线程批处理队列
【发布时间】:2012-11-12 23:18:24
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-11-23
    • 2016-05-02
    • 2015-04-15
    • 1970-01-01
    • 2012-12-06
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    相关资源
    最近更新 更多