The “为什么这个 Parallel.ForEach 代码会冻结程序?”问题的接受答案 https://stackoverflow.com/a/8365614/2031316建议将列表用法替换为并发包 http://msdn.microsoft.com/en-us/library/dd381779.aspx在 WPF 应用程序中。
我想了解是否阻塞收集 http://msdn.microsoft.com/en-us/library/dd267312%28v=vs.100%29.aspx在这种情况下可以使用吗?
你确实可以使用BlockingCollection
,但这样做绝对没有意义。
首先,请注意BlockingCollection http://msdn.microsoft.com/en-us/library/dd267312%28v=vs.100%29.aspx是一个集合的包装器,它实现了IProducerConsumerCollection<T> http://msdn.microsoft.com/en-us/library/dd287147%28v=vs.100%29.aspx。任何实现该接口的类型都可以用作底层存储:
当您创建一个BlockingCollection<T>
对象,您可以指定不
不仅有有限的容量,而且还有要使用的集合类型。为了
例如,您可以指定一个ConcurrentQueue<T>
第一个对象,
先出(FIFO)行为,或ConcurrentStack<T>
最后的对象
先入先出 (LIFO) 行为。您可以使用任何集合类
实施IProducerConsumerCollection<T>
界面。默认
集合类型为BlockingCollection<T>
is ConcurrentQueue<T>
.
这包括ConcurrentBag<T>
,这意味着您可以有一个阻塞并发包。那么普通的有什么区别IProducerConsumerCollection<T>
和阻塞集合?的文档BlockingCollection
说(强调我的):
BlockingCollection<T>
用作包装器IProducerConsumerCollection<T>
实例,允许删除尝试
从集合到阻塞,直到数据可被删除。
同样,一个BlockingCollection<T>
可以创建为强制执行
允许的数据元素数量上限在里面IProducerConsumerCollection<T>
[...]
由于在链接的问题中不需要做这些事情,所以使用BlockingCollection
只是添加了一层未使用的功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)