c# - IProducerConsumerCollection<T>.TryAdd/.TryTake - 他们什么时候返回 true/false?

标签 c# concurrent-collections

当我调用 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/

相关文章:

c# - 在 Mono : invalid conversion of function? 中将 C++ 公开给 C#

c# - .NET 4.0 并发收集性能

c# - 单击一次部署。该应用程序需要该程序集 MSDATASRC 版本

c# - 将网站图标检索为图标而不是图像

c# - EF Code First 异常实体类型不是使用简单 Odata 客户端的当前上下文模型的一部分

java - 使用多线程向 ArrayList 添加元素时,有时会给出 ConcurrentModificationException,有时则不会?

java - 何时使用 ConcurrentHashMap

c# - IL 无效程序,不明白为什么

c# - 用于频繁读取和罕见写入操作的并发集合 (.NET)

c# - 异步任务的许多实例可以共享对并发集合的引用,并在C#中向其中并发添加项目吗?