Supposons que je possède une classe unique, contenant une méthode simple. Disons qu'il y a un délégué avec la même signature que cette méthode.Un abonné d'événement .NET unique associé à plusieurs éditeurs d'événements et multithread
Je souhaite exécuter plusieurs processus de longue durée, chacun lancé à partir de cette classe. Chaque processus contient un événement, composé de délégués de multidiffusion du même type que le délégué mentionné ci-dessus. Une fois que chaque classe "worker" est instanciée, la classe "controlling", mentionnée ci-dessus, souscrit à l'événement du worker, avec la même méthode simple mentionnée ci-dessus. Une fois que le travail de chaque travailleur est terminé, son événement est appelé.
Dans un environnement monothread, cette architecture est assez simple. Cependant, je prévois d'exécuter chaque processus de travail sur un thread séparé. Par conséquent, plusieurs travailleurs invoqueront leurs événements (presque) simultanément, chacun souscrit par la méthode simple de la classe contrôlante.
Y at-il une garantie, étant donné que les délégués sont immuables, que chaque thread aura un accès exclusif à la méthode simple? Je ne suis pas concerné par le code de verrouillage dans la méthode simple, je suis inquiet que Thread # 1 invoquera la méthode avec un ensemble de paramètres, et Thread # 2 invoque la même méthode, presque en même temps. Avant que le thread n ° 1 entre dans l'instruction lock, le thread n ° 2 (qui entre dans la méthode presque au même moment que le thread n ° 2) remplace les paramètres spécifiés par Thread n ° 1, ce qui entraîne le traitement effectif des paramètres du thread n ° 2 deux fois? Je me rends compte que c'est un peu une bouchée, je serais ravi de fournir plus d'informations.
+1 Rx Yummy. Page d'accueil du projet [ici] (http://msdn.microsoft.com/fr-fr/devlabs/ee794896.aspx). Quelques échantillons [ici] (http://rxwiki.wikidot.com/101samples). Vous serez intéressé par la méthode ObserveOn (.. context ..). – Rusty