我们使用Parallel.foreach来使用阻塞集合中的项目。我知道默认情况下分配会在完成后发生。我想更多地了解这可能会如何影响BlockingCollection上的锁定/阻塞。是否有任何情况下,当线程消耗时,阻塞集合上的添加操作可能会被阻止?
感谢
答案 0 :(得分:3)
它可以(见How to: Add and Take Items Individually from a BlockingCollection)
第一个示例显示了如何添加和获取项目,以便在集合暂时为空(采用时)或以最大容量(添加时)或指定的超时时间段时,操作将被阻止。请注意,仅当使用构造函数中指定的最大容量创建BlockingCollection时,才会启用阻止最大容量。
因此,如果集合处于最大容量,它将阻止添加。
如果您使用foreach循环中的项目,则在此期间添加项目不会阻止,但您需要注意以下几项: