gpt4 book ai didi

.net - BlockingCollection(Of T)的目的是什么

转载 作者:行者123 更新时间:2023-12-03 12:40:36 25 4
gpt4 key购买 nike

我试图在.NET 4上新的Parallel Stacks的背景下理解BlockingCollection的目的。

MSDN文档说:


BlockingCollection用作IProducerConsumerCollection实例的包装器,允许从集合中进行删除尝试以阻止,直到可以删除数据为止。同样,可以创建BlockingCollection来对IProducerConsumerCollection中允许的数据元素数量施加上限。然后可能会阻止对该集合进行其他添加尝试,直到有足够的空间来存储添加的项目为止。


但是,当我查看一些IProducerConsumerCollection的实现(例如ConcurrentQueue)时,我看到它们提供了无锁,线程安全的实现。那么为什么需要BlockingCollection提供的锁定机制? MSDN中的所有示例都显示了通过BlockingCollection包装器使用这些集合,直接使用这些集合的麻烦是什么?使用BlockingCollection有什么好处?

最佳答案

如果无论如何您都无事可做(或者:直到执行完该操作之后才能继续执行),阻塞直到可以执行该操作才很方便。

如果您有一个要从中读取数据的非阻塞队列,并且此刻没有数据,则必须定期轮询它,或者等待某些信号量,直到有数据为止。如果队列阻塞,则已经自动完成。

同样,如果您尝试添加到已满的非阻塞队列中,则该操作将失败,然后必须弄清楚该怎么做。阻塞队列将仅等待直到有空间。

如果您有一些聪明的事情要做,而不是等待(例如检查另一个队列中的数据,或者引发QueueTooFullException),那么您就需要非阻塞队列,但事实并非如此。

通常,有一种方法可以指定阻塞队列的超时时间。

关于.net - BlockingCollection(Of T)的目的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1938776/

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