我有一个要从Web服务获取对象的类。我对这些对象的使用与顺序无关,因此我并行发出Web请求,并将结果添加到ConcurrentQueue
中。
同时,在发出请求时,我们可以处理响应。
因此,我希望能够在将我的项目添加到ConcurrentQueue
的内容时对其进行迭代。
如何让一个班级填满队列,而另一个班级则将其清空。几乎可以肯定,它的清空速度将比填充程序快,因此我不能在没有yield
的情况下对其进行枚举,因为该集合将为空且不会等待。
最佳答案
使用BlockingCollection
包裹ConcurrentQueue
(BlockingCollection
的默认后备存储是ConcurrentQueue
,因此您甚至不需要对其进行明确说明。
这使您可以将使用者写为:
foreach(var item in queue.GetConsumingEnumerable())
Process(item);