当我打电话IProducerConsumerCollection<T>.TryAdd(<T>)
或IProducerConsumerCollection<T>.TryTake(out <T>)
这些会因为另一个线程正在使用集合而失败吗?IProducerConsumerCollection <T> .TryAdd/.TryTake - 它们何时返回true/false?
或者在这种情况下,即使在另一个线程完成集合之后,如果有空间来添加或采取某些操作,它总是会返回true?
没有,我可以在这里看到:http://msdn.microsoft.com/en-us/library/dd287147.aspx
要在上面一点点扩大:使用'IProducerConsumerCollection最突出的情况下'是'BlockingCollection ',它使用的超时_only_为等待收集到足够的空间(对于'TryAdd目的()')或有一个元素(用于'TryTake()')。争用的处理与用户指定的超时无关。见例如http://referencesource.microsoft.com/#System/sys/system/collections/concurrent/BlockingCollection.cs,b4de4389b8938c7e –
既然'BlockingCollection'没有实现接口,这不是完全确定的,但它显示了如何微软希望这些方法得以实施。接口本身不支持超时(所以超时显然不会影响成功/失败),甚至在'BlockingCollection '中的非接口实现中,超时只与集合的完全/空状态有关,如非超时的情况下,没有别的。 –