Heute gelernt: Null - Race-Conditions bei Delegates
Thomas Wölfer
20. März 2004
Dinge sind offensichtlicher immer schwieriger als man meinen möchte. Seit heute gilt das auch für den Aufruf von Delegates :-) . Der sieht normalerweise so aus:
if( Click != null) Click( arg1, arg2);
So ruft man das vermutlich normalerweise auf, aber diese Art des Aufrufs erzeugt eine Race-Condition. Ein anderer Thread kann den Handler zwischen dem 'if' und dem tatsächlich Aufruf entfernen. Was man tun muss ist, man muss eine Kopie anlegen und diese verwenden:
ClickHandler handler = Click;
if( handler != null) hander( arg1, arg2);
Vielen Dank an Eric Gunnerson für diesen Hinweis.