値がリスト ex にエクスポートされ、その辞書がクリアされた後に ConcurrentDictionary をスレッドセーフにするアイデア。エクスポートとクリアの間に他のスレッドがデータを追加できないようにします。
このような: "
List<data> list;
list = (List<data>)_changedItems.Values; //get values before clearing
_changedItems.Clear();
" そして、関数 _changedItems.AddOrUpdate を使用して他のスレッドによって追加が行われます
行をクリアする前にスレッドがデータオブジェクトをコレクションに追加すると、ディクショナリからデータを取得してからコンテンツをクリアするまでの間に、新しいデータが失われる可能性があります。
または、ロック内で追加とクリアを行う唯一の方法です。
lock(object)
{
List<data> list;
list = (List<data>)_changedItems.Values;
_changedItems.Clear();
}
と
lock(object)
_changedItems.AddOrUpdate
ディクショナリからクリアされたすべてのアイテムを安全に返す Clear 関数が必要です。
-ラリー