等待所有线程在ConcurrentDictionary中完成编写

时间:2015-02-20 08:56:00

标签: c# multithreading concurrency concurrentdictionary

有一个并发字典,它从不同来源收集信息,一分钟就应该刷新并将收集的数据传递给另一个处理程序。

var currentDictionarySnapshot = _currentDictionary;
_currentDictionary = new ConcurrentDictionary<int, string>();
return new ReadOnlyDictionary<int, string>(currentDictionarySnapshot);

我需要的是让currentDictionarySnapshot等待所有引用它的线程完成写入并在之后创建新的ReadOnlyDictionaryConcurrentDictionary原生是否支持它,或者如果不支持,我该如何提供?

2 个答案:

答案 0 :(得分:0)

从概念上讲,您似乎需要ReaderWriterLockSlim。 “读者”将是写入字典的线程。 “作家”是复制字典的主题。

请注意,内置RWL不会缩放。它们只是在内部锁定每个操作的一些数据结构。这会破坏ConcurrentDictionary的可伸缩性属性,该属性可通过锁定条带进行扩展。

答案 1 :(得分:-1)

好吧,我的问题的解决方案是使用ManualResetEventSlim创建类并向其添加计数器。当读取时间到来时,我会使用ConcurrentDictionary创建此类的快照,并等待计数器变为0。