Sécurité de la répartition des événements dans les environnements multithread
Lors de l'utilisation d'événements dans des applications multithread, il est crucial de garantir la sécurité des threads pour éviter conditions de course potentielles. Une approche courante de la répartition des événements consiste à vérifier si un événement est nul avant de l'invoquer. Cependant, cela soulève la question :
Un autre fil de discussion peut-il modifier la liste d'invocation d'événements entre la vérification nulle et l'invocation d'événement ?
Pour répondre à ce problème, un outil plus robuste La solution consiste à utiliser le modèle suivant :
protected virtual void OnSomeEvent(EventArgs args) { EventHandler ev = SomeEvent; if (ev != null) ev(this, args); }
Cette technique fonctionne car :
Bien que cette solution aborde le scénario d'événements nuls, elle ne gère pas la possibilité de gestionnaires d'événements ou d'événements défunts. abonnements après la prise de la copie. Pour des solutions plus complètes et des discussions plus approfondies, veuillez vous référer aux ressources externes fournies.
De plus, en C# 6.0, la solution de Krzysztof, telle que décrite dans la réponse, présente une alternative viable.
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!