Maison >développement back-end >C++ >Comment corriger la 'collection a été modifiée; l'opération d'énumération peut ne pas exécuter l'erreur' dans WCF?

Comment corriger la 'collection a été modifiée; l'opération d'énumération peut ne pas exécuter l'erreur' dans WCF?

Linda Hamilton
Linda Hamiltonoriginal
2025-02-02 03:56:081024parcourir

How to Fix the

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:

<code class="language-csharp">foreach(Subscriber s in subscribers.Values)</code>

Code modifié:

<code class="language-csharp">foreach(Subscriber s in subscribers.Values.ToList())</code>

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn