多个线程并发访问队列

enz*_*m83 5 .net c# wcf

我正在创建一个带有NetTcpBinding服务和一个应用程序的应用程序BasicHttpBinding.通过这些服务,客户端向应用程序发送请求:这些请求必须放入一个Queue对象,即入站请求的队列.

  1. 两种服务都必须允许来自客户端的并发呼叫.
  2. 这意味着两个服务应同时访问队列以添加收到的请求.
  3. 此外,另一个线程必须访问队列才能获取和处理请求.

我可以使用ConcurrencyMode.Multiple,可以同时进行如此多的调用.但是,这并不能保证对队列的并发访问.我应该把两个ServiceHost放在两个不同的线程中吗?例如:

  • 第一个线程将队列中的请求出列并处理.
  • 第二个线程实例化NetTcpBinding服务并将新请求排入队列.此外,它通过回调发送任何回复.
  • 第三个线程实例化BasicHttpBinding服务并将新请求排入队列.

这是我的想法.由于我几乎是一个新手,如果你能给我一些建议,我将不胜感激.也许我应该开始编写三个并发访问队列的线程:目前前两个线程可能会将随机请求排入队列,而第三个线程会消耗这些请求.

Yah*_*hia 9

如果你在.NET 4上,你应该研究ConcurrentQueue<T>BlockingCollection.

基本上这些是线程安全的集合,它们是为高性能而实现的,并且大部分都是无锁的.

BlockingCollection 是专门为您描述的生产者 - 消费者 - 场景实施的.

供参考:


Maj*_*cRa 3

既然您将自己描述为“我几乎是一个新手”,我建议您阅读更一般的阅读 - C# 中的线程 Joseph Albahari免费在线文章/书籍。它彻底回顾了 C# 中线程的问题和检测。

我向您保证,仔细阅读第 3 部分和第 4 部分(并回顾第 1 部分和第 2 部分)将为您提供工具,不仅可以解决您当前的问题,还可以解决您在多线程处理过程中遇到的许多其他问题。

如果您只是想快速回答您的问题,请按照 Yahia 的回答进行操作。