Lingkungan pengembangan: .NET 4.0 atau lebih tinggi
Catatan: Namespace System.Collections.Concurrent dalam .NET Framework 4. Seperti dalam dokumentasi MSDN, ConcurrentDictionary mengimplementasikan koleksi aman utas yang dapat diakses oleh beberapa utas secara bersamaan. ConcurrentDictionary mengimplementasikan IDictionary<TKey, TValue>, dan memiliki beberapa mekanisme unik untuk menambahkan, memperbarui kunci/nilai. (Di bawah ini adalah penjelasan kapan dan metode apa yang harus digunakan)
Skenario 1: Tambahkan item baru, hanya jika kuncinya tidak ada di kamus... Gunakan TryAdd. TryAdd menerima kunci dan nilai yang ditambahkan ke kamus, mengembalikan fasle jika kunci tidak ada dalam kamus; Mengembalikan true jika ada. bool publik TryAdd(Kunci TKey, nilai TValue)
Situasi 2: Perbarui kunci yang ada di Nilai kamus... Gunakan TryUpdate. Jika kamus memiliki kunci ini dan memberikan pembaruan bersyarat, kamus harus memberikan nilai perbandingan dalam metode ini yang dapat diperbarui ketika nilai saat ini setara dengan nilai perbandingan (TValue comparisonValue). bool publik TryUpdate(Kunci TKey, TValue newValue, TValue comparisonValue)
Situasi 3: Kunci/nilai perlu ditambahkan ke kamus; Jika kunci tidak yakin apakah itu ada di kamus; Jika ada, perbarui Jika tidak ada, tambahkan...
Gunakan AddOrUpdate. AddOrUpdate memiliki dua kelebihan beban, dan dua kelebihan beban mengembalikan nilai nilai: Parameter kelebihan beban pertama adalah AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>) Parameternya adalah Kunci dan dua delegasi; Tujuan delegasi pertama adalah untuk mendelegasikan ketika kunci tidak ada dan mengembalikan nilai (nilai awal) Fungsi delegasi ini mengembalikan nilai awal <, key>. Func delegasi kedua < mengembalikan Value, key, oldValue> dan mengeksekusi delegasi pertama jika kunci tidak ada di kamus (jika ada, itu tidak berjalan; Tujuannya adalah untuk memberikan nilai nilai awal), dan kemudian akan mengembalikan nilai (nilai awal nilai); Delegasi kedua adalah metode untuk mengubah nilai nilai, yang juga membutuhkan nilai pengembalian (ubah nilai awal ke nilai akhir). Func < mengembalikan > Value, key, oldValue publik TValue AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
2. Parameter kelebihan beban kedua adalah AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>) Parameter pertama adalah kunci, yang kedua adalah ketika kunci tidak ada, nilai ini adalah nilai awal nilai, dan yang ketiga adalah delegasi adalah untuk mengeksekusi perubahan (Func< mengembalikan Value, key, oldValue>). publik TValue AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
Situasi 4: Tambahkan nilai kunci ke kamus, tetapi jika kuncinya sudah ada, hapus nilainya; Jika tidak, itu akan ditambahkan Kelebihan beban pertama: GetOrAdd(TKEY, Func<TKey, TValue>valueFactory) Parameter pertama adalah kunci, parameter kedua didelegasikan Func<value, key>, ketika kunci tidak ada, variabel diteruskan sebagai kunci, dan nilainya diubah. dan buat kunci dan nilai, mengembalikan nilai nilai.
2. Kelebihan Beban Kedua: GetOrAdd (TKEY, TValue) Parameter pertama adalah kunci, dan tujuan dari parameter kedua adalah untuk membuat nilai baru yang diberikan oleh kunci ketika tidak ada. Mengembalikan nilai. publik TValue GetOrAdd(TKEY,Func<TKey, TValue>valueFactory) publik TValue GetOrAdd(TKEY,TValue)
Setiap operasi AddOrUpdate dan GetOrAdd adalah metode yang dimiliki ConcurrentDictionary untuk memodifikasi/menulis ke kamus, yang memastikan keamanan utas (dilakukan dengan cara tanpa kunci, membaca data dalam kamus). |