有一个并发字典,它从不同来源收集信息,一分钟就应该刷新并将收集的数据传递给另一个处理程序。
var currentDictionarySnapshot = _currentDictionary;
_currentDictionary = new ConcurrentDictionary<int, string>();
return new ReadOnlyDictionary<int, string>(currentDictionarySnapshot);
我需要的是让currentDictionarySnapshot
等待所有引用它的线程完成写入并在之后创建新的ReadOnlyDictionary
。
ConcurrentDictionary
原生是否支持它,或者如果不支持,我该如何提供?
答案 0 :(得分:0)
从概念上讲,您似乎需要ReaderWriterLockSlim
。 “读者”将是写入字典的线程。 “作家”是复制字典的主题。
请注意,内置RWL不会缩放。它们只是在内部锁定每个操作的一些数据结构。这会破坏ConcurrentDictionary
的可伸缩性属性,该属性可通过锁定条带进行扩展。
答案 1 :(得分:-1)
好吧,我的问题的解决方案是使用ManualResetEventSlim创建类并向其添加计数器。当读取时间到来时,我会使用ConcurrentDictionary创建此类的快照,并等待计数器变为0。