2017-05-05 2 views
1

L'opérateur ?. qui peut être utilisé pour appeler un délégué ou un événement évite-t-il les conditions de concurrence?Évitez les conditions de course. opérateur

Par exemple. éviter condition de course manuellement:

//The event-invoking method that derived classes can override. 
     protected virtual void OnShapeChanged(ShapeEventArgs e) 
     { 
      // Make a temporary copy of the event to avoid possibility of 
      // a race condition if the last subscriber unsubscribes 
      // immediately after the null check and before the event is raised. 
      EventHandler<ShapeEventArgs> handler = ShapeChanged; 
      if (handler != null) 
      { 
       handler(this, e); 
      } 
     } 

source: msdn

+0

Oui. https://codeblog.jonskeet.uk/2015/01/30/clean-event-handlers-invocation-with-c-6/ – vcsjones

Répondre

2

Oui

Une autre utilisation pour l'accès réservé aux membres de l'état nul est d'invoquer les délégués d'une manière thread-safe avec beaucoup moins de code.

...

La nouvelle façon est thread-safe, car le compilateur génère du code pour évaluer PropertyChanged une seule fois

MSDN Source

+0

thx btw l'exemple de msdn fonctionne également sans surcharger la méthode virtuelle. Savez-vous pourquoi? –

+0

@GernotAtStackoverflow à quelle méthode virtuelle faites-vous référence? – MrZander

+0

void virtuel protégé OnShapeChanged (ShapeEventArgs e) –