gpt4 book ai didi

c# - 多线程批处理队列

转载 作者:行者123 更新时间:2023-11-30 18:36:39 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

关于c# - 多线程批处理队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com