2 Eylül 2018 Pazar

ConcurrentDictionary Sınıfı

Giriş
Şu satırı dahil ederiz.
using System.Collections.Concurrent;
Bu sınıf için şu kurallar geçerli
  • Okuma (TryGetValue) lock-free bir işlemdir
  • Enumeration (GetEnumerator) lock-free bir işlemdir
  • Yazma işleminde kademeli lock kullanılır.
Kalıtım
Şöyle. IReadOnlyCollection arayüzünden de kalıtıyor.
[SerializableAttribute]
[ComVisibleAttribute(false)]
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
    ExternalThreading = true)]
public class ConcurrentDictionary<TKey, TValue> : IDictionary<TKey, TValue>, 
ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, 
IEnumerable, IDictionary, ICollection, IReadOnlyDictionary<TKey, TValue>, 
IReadOnlyCollection<KeyValuePair<TKey, TValue>>

Indexer Kullanımı
Şöyle kullanılır.
var dic = new ConcurrentDictionary < int,  int > ();
dic [0] = 123;
GetOrAdd metodu - Value
Yeni key value çiftini ekler. Eğer varsa eski değeri döner. Şöyle yaparız:
ConcurrentDictionary<string, MyClass> dic;
MyClass value;
var value = dic.GetOrAdd("mykey", value);
GetOrAdd metodu - delegateŞöyle yaparız.
var value = dic.GetorAdd(key, (key) => MyMethod())
GetOrAdd metodu - Function
Şöyle yaparız.
var value = dic.GetorAdd(key, MyMethod)
TryGetValue metodu
True veya false döner.
Örnek
Şöyle yaparız.
ConcurrentDictionary<string,string> myDic = new ConcurrentDictionary<string,string>();
myDic["key1"] = "value1";

string removed;
if (myDic.TryRemove("key1", out removed))
{
    Console.WriteLine($"We have just remove {removed}");
}
Örnek
Şöyle yaparız.
ConcurrentDictionary<string, StateBag> stateBagDict = ..., string name = ...;

StateBag match;
stateBagDict.TryGetValue(name.ToUpperInvariant(), out match);


Hiç yorum yok:

Yorum Gönder