Heim >Backend-Entwicklung >C++ >So beheben Sie die 'Sammlung wurde geändert; Aufzählungsoperation kann möglicherweise keinen Fehler in WCF ausführen?
Fehlerbehebung bei der "Sammlung wurde geändert; Aufzählungsoperation kann möglicherweise keinen Fehler in WCF
ausführen"Die frustrierende "Sammlung wurde geändert; Aufzählungsoperation kann möglicherweise keinen Fehler ausführen", der beim Debuggen häufig verschwindet, was die Diagnose schwierig macht. Dieser Artikel untersucht ein bestimmtes WCF -Server -Szenario und bietet Lösungen.
Das Problem tritt in einem Windows -Dienst auf, das ein Wörterbuch zur Verfolgung von Datenereignis -Abonnenten verfolgt. Durch das Entfernen der ID eines Clients (UNSUBSIBRIKT) wird manchmal die NotifySubscribers
-Methode diesen Fehler ausgelöst.
Der wahrscheinliche Schuldige ist ein Rückruf, wie beispielsweise SignalData
, wodurch das Abonnenten -Wörterbuch während der NotifySubscribers
-Heop geändert wird. Um dies zu beheben, sollten Sie die foreach
-Klobe ändern:
ursprünglicher Code:
<code class="language-csharp">foreach(Subscriber s in subscribers.Values)</code>
geänderter Code:
<code class="language-csharp">foreach(Subscriber s in subscribers.Values.ToList())</code>
Durch das Erstellen einer Kopie des subscribers.Values
mit ToList()
erstellt, arbeitet die Aufzählung auf einem Schnappschuss des Staates des Wörterbuchs zu Start des Schleifens. Alle nachfolgenden Modifikationen am ursprünglichen Wörterbuch haben keinen Einfluss auf die Aufzählung, wodurch der Fehler beseitigt wird, wenn der Rückruf SignalData
die Quelle des Problems ist. Dies isoliert die Schleife von externen Veränderungen, um eine reibungslose Ausführung zu gewährleisten.
Das obige ist der detaillierte Inhalt vonSo beheben Sie die 'Sammlung wurde geändert; Aufzählungsoperation kann möglicherweise keinen Fehler in WCF ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!