等待所有线程完成写入 ConcurrentDictionary

Waiting for all threads to finish writing in ConcurrentDictionary

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

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

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

从概念上讲,您似乎需要 ReaderWriterLockSlim。 "Readers" 将是写入字典的线程。 "writer" 是复制字典的线程。

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

好吧,我为我的问题所做的解决方案是使用 ManualResetEventSlim 创建 class 并向其添加计数器。当阅读时间到了时,我会像使用 ConcurrentDictionary 一样制作此 class 的快照并等待计数器变为 0。