Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 58026|Jawab: 2

[Sumber] ConcurrentDictionary mendukung pembaruan baru dan yang diperbarui

[Salin tautan]
Diposting pada 13/07/2016 11.12.05 | | |
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).




Mantan:Kueri multi-kondisional LINQ di mana kondisi dibangun
Depan:Windows di bawah perintah operasi dasar Memcached
 Tuan tanah| Diposting pada 13/09/2016 13.33.25 |
Kamus Bersamaan vs. Kamus+Penguncian - Dennis Gao
http://www.itsvse.com/thread-3106-1-1.html
(Sumber: Jaringan Pertanian Kode)
 Tuan tanah| Diposting pada 23/03/2021 11.32.18 |
Tambahkan atau perbarui

atau

Alamat dokumen:Login hyperlink terlihat.
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com