我们使用 Parallel.foreach 来使用阻塞集合中的项目。我知道默认情况下,分区会在完成后发生。我想更多地了解这可能如何影响 BlockingCollection 上的锁/阻塞。是否存在在线程消耗时可能会阻止对阻塞集合的添加操作的情况?
谢谢
我们使用 Parallel.foreach 来使用阻塞集合中的项目。我知道默认情况下,分区会在完成后发生。我想更多地了解这可能如何影响 BlockingCollection 上的锁/阻塞。是否存在在线程消耗时可能会阻止对阻塞集合的添加操作的情况?
谢谢
它可以(请参阅如何:从 BlockingCollection 中单独添加和获取项目)
第一个示例显示如何添加和获取项目,以便在集合暂时为空(获取时)或达到最大容量(添加时)或指定的超时期限已过时,操作将阻塞。请注意,仅在使用构造函数中指定的最大容量创建 BlockingCollection 时才启用最大容量阻塞。
因此,如果集合处于最大容量,它将阻止添加。
如果您在 foreach 循环中使用项目,则在此期间添加项目不会阻塞,但您需要注意以下几点: