Heim > Backend-Entwicklung > C++ > Wie kann die 'Sammlung geändert' verhindern, dass die Aufzählungsoperation in WCF -Diensten keine Ausnahme ausführt?

Wie kann die 'Sammlung geändert' verhindern, dass die Aufzählungsoperation in WCF -Diensten keine Ausnahme ausführt?

Linda Hamilton
Freigeben: 2025-02-02 03:36:08
Original
726 Leute haben es durchsucht

How to Prevent the

adressieren die Ausnahme "Sammlung modifiziert" in WCF

Dieser Artikel untersucht die gemeinsame "Sammlung wurde geändert; Aufzählungsoperation kann möglicherweise keine Ausnahme ausführen", die häufig bei der Arbeit mit Sammlungen in Umgebungen mit Multi-Threaded, insbesondere innerhalb von WCF-Diensten, auftritt.

Szenario und Code -Aufschlüsselung

Die Ausnahme ergibt sich, wenn eine Sammlung iteriert wird, während gleichzeitig geändert wird. Stellen Sie sich einen WCF -Dienst vor, der ein Wörterbuch verwendet, um Abonnenten zu verfolgen. Eine Methode iteriert dieses Wörterbuch, um Abonnenten zu benachrichtigen, aber ein anderer Prozess (möglicherweise innerhalb derselben Methode) verändert das Wörterbuch gleichzeitig. Dies führt zu der Ausnahme.

Ursachenanalyse

Das Problem beruht auf der gleichzeitigen Änderung des Abonnenten -Wörterbuchs während der Iteration. Wenn beispielsweise eine SignalData -Methode, zum Beispiel, einen Abonnenten innerhalb der Iterationsschleife entfernt oder aktualisiert, ändert sich die Struktur der Sammlung und verursacht die Ausnahme.

Lösung: Erstellen Sie eine sichere Kopie

Die Lösung liegt beim Erstellen einer Kopie der Sammlung , bevor die Iteration starten. Erstellen Sie eine Kopie mit subscribers.Values: ToList(), anstatt direkt über das

zu iterieren
<code class="language-csharp">foreach (Subscriber s in subscribers.Values.ToList())</code>
Nach dem Login kopieren

Dies schafft in diesem Moment einen Schnappschuss des Staates der Sammlung. Modifikationen zum ursprünglichen subscribers Wörterbuch wirken sich nicht auf diese neue Liste aus, wodurch die Ausnahme verhindert wird.

Zusammenfassung

Die Ausnahme "Sammlung wurde modifiziert" unterstreicht die Gefahren des gleichzeitigen Zugangs und der Änderung von Sammlungen. Durch die Verwendung einer Kopie der Sammlung für die Iteration gewährleisten wir die Sicherheit von Threads und verhindern die Ausnahme, wobei die Integrität des Aufzählungsprozesses beibehalten wird.

Das obige ist der detaillierte Inhalt vonWie kann die 'Sammlung geändert' verhindern, dass die Aufzählungsoperation in WCF -Diensten keine Ausnahme ausführt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage