Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 58026|Yanıt: 2

[Kaynak] ConcurrentDictionary yeni ve güncellenmiş güncellemeleri destekler

[Bağlantıyı kopyala]
Yayınlandı 13.07.2016 11:12:05 | | |
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).




Önceki:LINQ çok koşullu sorgu, burada koşul oluşturulur
Önümüzdeki:Windows'un altında Memcached temel işlem komutları
 Ev sahibi| Yayınlandı 13.09.2016 13:33:25 |
Eşzamanlı Sözlük vs. Sözlük+Kilitleme - Dennis Gao
http://www.itsvse.com/thread-3106-1-1.html
(Kaynak: Code Agriculture Network)
 Ev sahibi| Yayınlandı 23.03.2021 11:32:18 |
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com