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