当我调用IProducerConsumerCollection<T>.TryAdd(<T>)
或IProducerConsumerCollection<T>.TryTake(out <T>)
时,这些会失败,因为另一个线程正在使用该集合吗?
或者,即使在另一个线程完成了该集合之后,如果还有空间可以添加或者要采取什么,它将始终返回true?
我在这里看不到任何内容:http://msdn.microsoft.com/en-us/library/dd287147.aspx
答案 0 :(得分:6)
虽然理论上集合可以出于任何原因拒绝接受/添加请求,但我知道的唯一原因是Add
失败,因为集合已达到其容量,{{1因为集合是空的而失败。
集合是从一开始就设计的,可以从多个线程中使用 - 所以如果有剩余的项目,即使两个线程同时尝试Take
,它们也应该得到一个项目和一个返回值为Take
。
答案 1 :(得分:0)
例如, BlockingCollection <T
&gt; ,这是对接口的高级抽象(虽然它没有实现接口)和阻塞功能可能会引发以下情况之一: