Maison > développement back-end > C++ > Comment empêcher la modification de la 'collection a été modifiée; l'opération d'énumération peut ne pas exécuter' Exception 'dans les services WCF?

Comment empêcher la modification de la 'collection a été modifiée; l'opération d'énumération peut ne pas exécuter' Exception 'dans les services WCF?

Linda Hamilton
Libérer: 2025-02-02 03:36:08
original
726 Les gens l'ont consulté

How to Prevent the

Amission de l'exception "Collection Modified" dans WCF

Cet article examine que la "collection commune a été modifiée; l'opération d'énumération peut ne pas exécuter" Exception, fréquemment rencontrée lorsque vous travaillez avec des collections dans des environnements multithreads, en particulier dans les services WCF.

Scénario et panne de code

L'exception se produit lorsqu'une collection est itérée tout en étant modifiée simultanément. Imaginez un service WCF utilisant un dictionnaire pour suivre les abonnés. Une méthode itère dans ce dictionnaire pour informer les abonnés, mais un autre processus (peut-être dans la même méthode) modifie simultanément le dictionnaire. Cela conduit à l'exception.

Analyse des causes racines

Le problème découle de la modification simultanée du dictionnaire d'abonné pendant l'itération. Si une méthode SignalData, par exemple, supprime ou met à jour un abonné dans la boucle d'itération, la structure de la collection change, provoquant l'exception.

Solution: créez une copie sûre

La solution réside dans la création d'une copie de la collection avant Démarrage de l'itération. Au lieu d'itréter directement le subscribers.Values, créez une copie en utilisant ToList():

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

Cela crée un instantané de l'état de la collection à ce moment. Les modifications du dictionnaire d'origine subscribers n'affecteront pas cette nouvelle liste, empêchant l'exception.

Résumé

L'exception "Collection a été modifiée" met en évidence les dangers de l'accès et de la modification simultanés des collections. En utilisant une copie de la collection pour itération, nous assurons la sécurité des filetages et empêchons l'exception, en maintenant l'intégrité du processus d'énumération.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal