我有一个要从Web服务获取对象的类。我对这些对象的使用与顺序无关,因此我并行发出Web请求,并将结果添加到ConcurrentQueue中。

同时,在发出请求时,我们可以处理响应。

因此,我希望能够在将我的项目添加到ConcurrentQueue的内容时对其进行迭代。

如何让一个班级填满队列,而另一个班级则将其清空。几乎可以肯定,它的清空速度将比填充程序快,因此我不能在没有yield的情况下对其进行枚举,因为该集合将为空且不会等待。

最佳答案

使用BlockingCollection包裹ConcurrentQueueBlockingCollection的默认后备存储是ConcurrentQueue,因此您甚至不需要对其进行明确说明。

这使您可以将使用者写为:

foreach(var item in queue.GetConsumingEnumerable())
    Process(item);

08-18 12:02