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