摘要:譯 ConcurrentDictionary’s support for adding and updating
簡介: Dictionary的進階化。.Net 4.0以上。
譯: http://blogs.msdn.com/b/pfxteam/archive/2010/01/08/9945809.aspx
以下內容是參考以上網頁並經小伙整理過。
開發環境: .NET 4.0以上
說明:
- 在NET Framework 4內的System.Collections.Concurrent命名空間。
- 正如在MSDN文檔,ConcurrentDictionary可實現一個線程安全的集合,可以由多個線程同時訪問Key-value。
- ConcurrentDictionary實現IDictionary<TKey, TValue>,並且它有一些獨特的機制 adding 、 updating key/value。(下面是說明何時該用什麼方法)
裝況一:添加一個新的項目,只有當key不存在於字典中...
- 使用TryAdd。 TryAdd接受鍵和值添加到字典中,如果該鍵不存在於字典中則返回fasle;若存在則返回true。
狀況二:更新現有的key在字典中的Value...
- 使用TryUpdate。字典若有該key,並且給予條件式的更新,在這方法中要給予一個比較值當目前的值等同比較值(TValue comparisonValue)時則可以更新。
狀況三:一個key/value要添加到字典中;如果該鍵不確定是否存在於字典中;若有存在則更新不存在則新增...
- 使用AddOrUpdate。 AddOrUpdate有兩個重載,兩種重載接返會回value的值:
1.第一個重載的參數為AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
- 參數為Key以及兩個委派;第一個委派的目的是當key不存在時所執行的委派並返回NewValue新增一個值。Func<key, NewValue>
- 第二個委派Func<Key, oldValue,NewValue>如果該key存在於字典中則執行(若不存在則不跑;目的是判斷此存在的值是否有合乎規則),然後會要 return NewValue 蓋掉原本的Value。Func<key, Value, NewValue>
2.第二個重載的參數為AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
- 第一個參數為key,第二個參數是當key不存在時,則此值為value的初始值,第三個為委派是執行變化(Func<key, Value,NewValue>)若不符合委派條件返回NewValue取代初始值。
狀況四:在字典中要添加key的值,但若是key已經存在則取出value;否則則新增
1.第一個重載:GetOrAdd(TKEY,Func<TKey, TValue>valueFactory)
- 第一個參數為key,第二個參數為委派Func< key,value>,當key不存在時傳入一變數為key,在對value做變化,建立key及value,返回一value值。
2.第二個重載:GetOrAdd(TKEY,TValue)
- 第一個參數為key,第二個參數的目的是當key不存在時要新建key所給予的value。
AddOrUpdate和GetOrAdd的每個操作對於修改/寫入到字典中,ConcurrentDictionary所擁有的方法,可以確保線程安全(無鎖的方式進行,在字典中讀取數據)。
By-藍小伙-若有錯誤歡迎指正