Geliştirme ortamı: .NET 4.0 veya üzeri
Not: .NET Framework 4 içindeki System.Collections.Concurrent isim alanı. MSDN dokümantasyonunda olduğu gibi, ConcurrentDictionary aynı anda birden fazla iş parçacığı tarafından erişilebilen iş parçacığı güvenli bir koleksiyon uygular. ConcurrentDictionary, IDictionary<TKey, TValue> uygular ve anahtar/değer ekleme, güncelleme için bazı benzersiz mekanizmalara sahiptir. (Aşağıda ne zaman ve hangi yöntemin kullanılacağına dair bir açıklama bulunmaktadır)
Senaryo 1: Yeni bir öğe ekleyin, ancak anahtar sözlükte yoksa... TryAdd'i kullanın. TryAdd anahtarı ve sözlüğe eklenen değeri kabul eder, anahtar sözlükte yoksa fasle döner; Varsa doğru döner. public bool TryAdd(TKey key, TValue değeri)
Durum 2: Sözlüğün Değeri'ndeki mevcut anahtarı güncelleyin... TryUpdate kullanın. Eğer sözlük bu anahtara sahipse ve koşullu bir güncelleme verirse, bu yöntemde mevcut değer karşılaştırma değerine eşdeğer olduğunda güncellenebilecek bir karşılaştırma değeri vermelidir (TValue comparisonValue). public bool Deneme Güncelleme (TKey anahtarı, TValue newValue, TValue karşılaştırmasıDeğer)
Durum 3: Sözlüğe bir anahtar/değer eklenmelidir; Anahtar sözlükte var olup olmadığından emin değilse; Varsa, güncelle Yoksa, ekle...
AddOrUpdate kullanın. AddOrUpdate'te iki aşırı yük var ve bu iki aşırı yük değer değerini döndürür: İlk aşırı yüklenen parametre AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>) Parametreler şunlardır: Anahtar ve iki delege; İlk delegenin amacı, anahtar olmadığında devretmek ve değeri (ilk değeri) döndürmektir. Bu delegasyon Func, < başlangıç değeri, anahtar> döndürür. İkinci delege Func, anahtar < Value, key, oldValue> döndürür ve anahtar sözlükte yoksa (varsa, çalışmaz; Amaç, değere ilk değeri vermektir) ve ardından değeri (değerin ilk değerini) döndürecektir; İkinci delegasyon ise değer değerini değiştirmek için kullanılan bir yöntemdir ve bu da geri dönüş değerini gerektirir (başlangıç değerini nihai değere değiştirmek). Func < > Değer, anahtar, oldValue döndürür public TValue AddOrUpdate (TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
2. İkinci aşırı yüklenmenin parametresi AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>) İlk parametre anahtardır, ikincisi anahtar yokken bu değerin başlangıç değeridir ve üçüncüsü ise değişikliği çalıştırmak için delege edilir (Func< Value, key, oldValue> döndürür). public TValue AddOrUpdate (TKey, TValue, Func<TKey, TValue, TValue>)
Durum 4: Anahtar değerini sözlüğe ekleyin, ancak anahtar zaten varsa, değeri çıkarın; Aksi takdirde, eklenecek İlk aşırı yüklenme: GetOrAdd (TKEY, Func<TKey, TValue>valueFactory) İlk parametre anahtardır, ikinci parametre ise Func<value, key> olarak delege edilir; anahtar yoksa, bir değişken anahtar olarak geçirilir ve değer değiştirilir. ve bir anahtar ve değer yaratarak bir değer döndürür.
2. İkinci Aşırı Yük: GetOrAdd (TKEY, TValue) İlk parametre anahtardır ve ikinci parametrin amacı, anahtar olmadığında verilen yeni bir değer yaratmaktır. Değer döndürür. public TValue GetOrAdd(TKEY, Func<TKey, TValue>valueFactory) public TValue GetOrAdd(TKEY, TValue)
AddOrUpdate ve GetOrAdd işlemlerinin her işlemi, ConcurrentDictionary'nin sözlüğe düzenleme/yazma yöntemidir ve bu da iş parçacığı güvenliğini sağlar (kilitsiz şekilde, sözlükteki verileri okuyarak yapılır). |