我有许多线程从服务器列表中检索数据。服务器列表每5分钟从服务器解析器下载一次。我处理数据的线程应该只使用响应时间最短的服务器。每个服务器的响应时间可能与请求的请求明显不同。因此,在更新服务器列表之间的时间范围内,我应该验证每个服务器的响应时间。
我最初的方法是创建两个额外的线程:第一个更新服务器列表,第二个来验证每个服务器的响应时间,并根据服务器的响应时间对服务器列表进行排序。
我尝试使用专门用于连接生产者和消费者的BlockingCollection,但在我的任务中,我有两个并发消费者,并且BlockingCollection还没有本机能力来插入用于创建优先服务器列表的项目。
ConcurrentStack或ConcurrentQueue也不能按原样使用,因为它们像BlockingCollection一样是非阻塞的,并且它们需要其他机制来阻止需要队列中项目的线程。
请帮我解决这个任务
由于
答案 0 :(得分:1)
考虑使用两个或更多BlockingCollection并使用TakeFromAny来收听所有队列。该方法(虽然我没有在文档中提到它)更喜欢从它正在侦听的队列数组中的第一个队列中获取元素。
答案 1 :(得分:0)
不幸的是,这不是内置的,您可能需要实现自己的。为了帮助您入门,msdn示例中已经实现了这一功能,可以与BlockingCollection一起使用。
http://blogs.msdn.com/pfxteam/archive/2010/04/04/9990342.aspx
为了有效实现,您需要将其基于堆数据结构。这是一篇很好的文章虽然该类没有实现IProducerConsumerCollection:
http://www.codeproject.com/Articles/126751/Priority-queue-in-C-with-the-help-of-heap-data-str