Le dépannage de la "collection a été modifié; l'opération d'énumération ne peut pas exécuter une erreur" dans WCF
La "collection frustrante a été modifiée; l'opération d'énumération peut ne pas exécuter" l'erreur disparaît souvent lors du débogage, ce qui rend le diagnostic difficile. Cet article examine un scénario de serveur WCF spécifique et propose des solutions.
Le problème se pose dans un service Windows à l'aide d'un dictionnaire pour suivre les abonnés des événements de données. La suppression de l'ID d'un client (désinscription) provoque parfois la méthode NotifySubscribers
pour lancer cette erreur.
Le coupable probable est un rappel, tel que SignalData
, modifiant le dictionnaire d'abonné pendant la boucle NotifySubscribers
. Pour résoudre ce problème, envisagez de modifier la boucle foreach
:
Code d'origine:
foreach(Subscriber s in subscribers.Values)
Code modifié:
foreach(Subscriber s in subscribers.Values.ToList())
En créant une copie du subscribers.Values
en utilisant ToList()
, l'énumération fonctionne sur un instantané de l'état du dictionnaire au début de la boucle. Toute modification ultérieure du dictionnaire d'origine n'affectera pas l'énumération, éliminant ainsi l'erreur si le rappel SignalData
est la source du problème. Cela isole la boucle des changements externes, assurant une exécution en douceur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!