Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk mencegah 'Koleksi diubahsuai; Operasi penghitungan tidak boleh melaksanakan' pengecualian dalam perkhidmatan WCF?

Bagaimana untuk mencegah 'Koleksi diubahsuai; Operasi penghitungan tidak boleh melaksanakan' pengecualian dalam perkhidmatan WCF?

Linda Hamilton
Linda Hamiltonasal
2025-02-02 03:36:08726semak imbas

How to Prevent the

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

tidak akan menjejaskan senarai baru ini, mencegah pengecualian.
<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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn