gpt4 book ai didi

c# - BlockingCollection 在添加项目时会阻塞吗?如果是这样,为什么?

转载 作者:行者123 更新时间:2023-11-30 16:23:55 25 4
gpt4 key购买 nike

我们使用 Parallel.foreach 来使用阻塞集合中的项目。我知道默认情况下分区会在完成后发生。我想了解更多这可能如何影响 BlockingCollection 上的锁定/阻塞。在线程消耗时,是否存在阻塞集合上的添加操作可能被阻塞的情况?

谢谢

最佳答案

它可以(参见 How to: Add and Take Items Individually from a BlockingCollection)

This first example shows how to add and take items so that the operations will block if the collection is either temporarily empty (when taking) or at maximum capacity (when adding), or a specified timeout period has elapsed. Note that blocking on maximum capacity is only enabled when the BlockingCollection has been created with a maximum capacity specified in the constructor.

因此,如果集合达到最大容量,它将阻止添加。

如果您在 foreach 循环中使用项目,在此期间添加项目不会阻塞,但您需要注意以下几点:

  1. 无法保证项目的枚举顺序与生产者线程添加它们的顺序相同。
  2. 重要的是要了解这种枚举 (foreach) 表示集合在某个精确时间点的快照。如果在您执行循环时其他线程同时添加或删除项目,则循环可能不代表集合的实际状态。

关于c# - BlockingCollection 在添加项目时会阻塞吗?如果是这样,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11139089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com