我正在创建一个带有NetTcpBinding服务和一个应用程序的应用程序BasicHttpBinding.通过这些服务,客户端向应用程序发送请求:这些请求必须放入一个Queue对象,即入站请求的队列.
我可以使用ConcurrencyMode.Multiple,可以同时进行如此多的调用.但是,这并不能保证对队列的并发访问.我应该把两个ServiceHost放在两个不同的线程中吗?例如:
NetTcpBinding服务并将新请求排入队列.此外,它通过回调发送任何回复.BasicHttpBinding服务并将新请求排入队列.这是我的想法.由于我几乎是一个新手,如果你能给我一些建议,我将不胜感激.也许我应该开始编写三个并发访问队列的线程:目前前两个线程可能会将随机请求排入队列,而第三个线程会消耗这些请求.
如果你在.NET 4上,你应该研究ConcurrentQueue<T>和BlockingCollection.
基本上这些是线程安全的集合,它们是为高性能而实现的,并且大部分都是无锁的.
BlockingCollection 是专门为您描述的生产者 - 消费者 - 场景实施的.
供参考:
既然您将自己描述为“我几乎是一个新手”,我建议您阅读更一般的阅读 - C# 中的线程 Joseph Albahari免费在线文章/书籍。它彻底回顾了 C# 中线程的问题和检测。
我向您保证,仔细阅读第 3 部分和第 4 部分(并回顾第 1 部分和第 2 部分)将为您提供工具,不仅可以解决您当前的问题,还可以解决您在多线程处理过程中遇到的许多其他问题。
如果您只是想快速回答您的问题,请按照 Yahia 的回答进行操作。