2011-05-02 1 views
0

Je conserve une collection d'objets dans un sac concurrent. en fonction de l'entrée reçue, je veux modifier ces objets. Comment cela peut-il être fait? Je ne peux pas utiliser trytake car il supprime l'élément. Je ne suis pas sûr si trypeek serait itérer à travers la collection. OTOH, copier les éléments dans un tableau ne fonctionnerait pas car alors les objets sont en lecture seule. S'il vous plaît aiderModification d'éléments dans un sac concurrentiel + C#

+2

vous vous voulez dire que vous voulez modifier l'ensemble des objets (par exemple pour que les différents objets sont dans le sac), ou voulez-vous * muter * des objets individuels? c'est-à-dire les mêmes objets mais maintenant avec des valeurs différentes? –

+0

Je veux muter des objets individuels pour que les mêmes objets aient maintenant des valeurs différentes – sura

+1

@sura - alors @Roy en a la vérité; il n'y a aucun moyen magique de rendre les objets thread-safe (sauf si vous les codez explicitement pour être); prendre puis changer, modifier et rajouter semble l'option la plus sûre et la plus pragmatique. –

Répondre

2

Vous ne pouvez pas modifier les éléments en place, il faut les enlever, les modifier et de les remettre.

1

Je pense que vous devez rouler votre propre colletction de fil sauver. TryPeek renvoie un élément, mais ne garantit en aucun cas qu'aucun autre thread ne le modifie.

Il n'y a pas non plus d'itération thread-safe.

Voir ici: http://www.codethinked.com/net-40-and-system_collections_concurrent_concurrentbag

HTH

Mario

+0

par itération thread-safe Je ne prends pas en compte l'énumérateur, car cela fait un snapshot des éléments. –

Questions connexes