当我调用IProducerConsumerCollection<T>.TryAdd(<T>)
或IProducerConsumerCollection<T>.TryTake(out <T>)
时,它们是否会因为另一个线程正在使用该集合而失败?
还是如果在其他线程完成收集后仍然有空间要添加或要占用一些东西,它将始终返回true?
在这里看不到任何内容:http://msdn.microsoft.com/en-us/library/dd287147.aspx
最佳答案
虽然从理论上说集合可以出于任何原因拒绝接受/添加请求,但我知道的唯一原因是Add
失败,因为集合已达到其容量;而Take
失败,因为集合是空的。
集合是从一开始就设计的,可以在多个线程中使用-因此,即使还有两个线程试图同时Take
,也有剩余的项目,它们都应该都得到一个项目,并且返回值都。
关于c# - IProducerConsumerCollection <T> .TryAdd/.TryTake-它们何时返回true/false?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14256944/