【发布时间】:2012-05-24 11:02:18
【问题描述】:
我尝试通过将 ConcurrentDictionary 包装在 BlockingCollection 中来实现它,但似乎没有成功。
我了解一个变量声明可与 BlockingCollection 一起使用,例如 ConcurrentBag<T>、ConcurrentQueue<T> 等。
所以,要创建一个包装在 BlockingCollection 中的 ConcurrentBag,我会像这样声明和实例化:
BlockingCollection<int> bag = new BlockingCollection<int>(new ConcurrentBag<int>());
但是如何为 ConcurrentDictionary 做呢?我需要 BlockingCollection 在生产者和消费者端的阻塞功能。
【问题讨论】:
-
字典(以及 ConcurrentDictionary 也是)不保留项目的顺序。你能描述一下你的生产者-消费者场景吗?
-
@Dennis,我知道这一点。生产者将 KeyValuePairs 存储在 concurrentDictionary 中,如果 int 与相应的键匹配,则消费者任务递增一个 int 并删除 KeyValuePair。我这样做是因为工作任务用值填充并发字典,但以任意顺序,消费者任务确保接收到的值以正确的顺序传递/处理。可以将 ConcurrentDictionary 包装在 BlockingCollection 中吗?
-
你想出了什么解决方案?我正在尝试为类似问题找到一个很好的解决方案,即生产者没有按照消费者所需的顺序生产物品。 (旧帖我知道,但值得一试)
标签: c# concurrency concurrentdictionary