1 votes

Délégués asynchrones .NET et membres d'instance d'objet

En utilisant les délégués asynchrones de .NET pour la première fois, j'ai été surpris de découvrir empiriquement que lorsque l'on changeait la valeur d'un membre d'instance (par exemple un int) dans la méthode asynchrone (exécutée dans le nouveau thread), la valeur du membre d'instance exécuté dans le thread original était également modifiée.

Je pensais que lorsqu'un nouveau fil est créé, les valeurs des membres de l'instance sont copiées à partir du fil original, mais qu'elles sont ensuite isolées de l'original.

Quelqu'un pourrait-il m'aider à mieux comprendre ce qui se passe sous les couvertures ? Dans mes recherches, la plupart des livres/articles parlent de variables statiques, mais pas de variables d'instance. Merci !

1voto

Steven Sudit Points 13793

Les délégués asynchrones n'effectuent aucune copie et ne rendent pas vos champs thread-local. Tout ce qu'ils font, c'est mettre en file d'attente le délégué pour qu'il s'exécute dans un thread du pool de threads. Ce que fait ce délégué affecte ce qu'il était censé affecter depuis le début. Cela pourrait facilement signifier que les changements qu'il fait ne sont pas thread-safe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X