10
votes

Les classes statiques sont-elles partagées entre différents threads en C #

Je dois partager une valeur entre les threads sans dépasser sa limite. Une variable statique fait-elle cela?


1 commentaires

Qu'entendez-vous par «Sans dépasser sa frontière?»


5 Réponses :


11
votes

Vous voulez dire que vous voulez que la variable soit thread-local?

Vous pouvez soit utiliser [Threadstatic] attribut ou le ThreadLocal classe de .net 4.

Personnellement, je préférerais ThreadLocal Si vous sont en utilisant .NET 4 - mais il serait toujours toujours d'éviter ce genre de contexte si vous le pouvez. Pouvez-vous encapsuler les informations dans une instance qui permet de démarrer le thread, par exemple?


3 commentaires

@ Gik25: J'essaierais toujours de concevoir votre code pour que ce soit N'a pas sur ceci. Il sera plus clair et plus facile à tester si vous donnez explicitement à chaque objet son contexte.


J'ai une application multithreadée où chaque thread est dédié à l'élaboration d'un ensemble de données d'entrée qui sont désormais accessibles comme suit: FORNUTURAHELPER DATI_FORNITURA = WORKFLOW.TEMPORARAYDATA ["FORNUTRA"] Comme ForNituraRaHelper; My Objectif consiste à accéder facilement à ces données, comme suit: Forniturahelper Dati_fornitura = temporaire data.fornitura; temporaireData.fornitura serait statique, comme transaction.current son partagé sur le workflow. Mais puisque chaque thread exécute un WKF différent, il ne doit pas vaincre la limite du fil (l'idéal serait d'être local sur le WKF).


@ Gik25: Comme je l'ai dit, vous pourrait utiliser des thread-locaux pour cela, mais je ne le ferais certainement pas. Je donnerais à chaque tâche de traitement le contexte explicitement.




3
votes

vous le décorez avec le threadstaticattribute , pour rendre la variable statique partager uniquement sur le thread inindiqué.

Les variables statiques par défaut sont sur toutes les discussions dans une Appdomain.


0 commentaires

0
votes

Oui, vous devez faire attention à la synchronisation.


0 commentaires