Mengatasi pengecualian "Koleksi Modified" dalam WCF
Artikel ini mengkaji "koleksi biasa telah diubah suai; operasi penghitungan tidak boleh melaksanakan" pengecualian, sering ditemui ketika bekerja dengan koleksi dalam persekitaran berbilang threaded, terutama dalam perkhidmatan WCF.senario dan pecahan kod
Pengecualian timbul apabila koleksi berulang sementara pada masa yang sama diubahsuai. Bayangkan perkhidmatan WCF menggunakan kamus untuk mengesan pelanggan. Kaedah melangkah melalui kamus ini untuk memberitahu pelanggan, tetapi proses lain (mungkin dalam kaedah yang sama) mengubah kamus serentak. Ini membawa kepada pengecualian.
analisis punca akar
Masalahnya berpunca daripada pengubahsuaian serentak kamus pelanggan semasa lelaran. Jika kaedah , misalnya, membuang atau mengemas kini pelanggan dalam gelung lelaran, struktur pengumpulan berubah, menyebabkan pengecualian.
SignalData
Penyelesaian: Buat salinan selamat
Penyelesaiannya terletak pada membuat salinan koleksi sebelum
memulakan lelaran. Daripada secara langsung melelehkan, buat salinan menggunakan :
subscribers.Values
ToList()
Ini mewujudkan gambaran dari keadaan koleksi pada masa itu. Pengubahsuaian ke kamus asal
<code class="language-csharp">foreach (Subscriber s in subscribers.Values.ToList())</code>
subscribers
Ringkasan
"Koleksi telah diubah suai" menyoroti bahaya akses serentak dan pengubahsuaian koleksi. Dengan menggunakan salinan koleksi untuk lelaran, kami memastikan keselamatan benang dan mencegah pengecualian, mengekalkan integriti proses penghitungan.
Atas ialah kandungan terperinci Bagaimana untuk mencegah 'Koleksi diubahsuai; Operasi penghitungan tidak boleh melaksanakan' pengecualian dalam perkhidmatan WCF?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!