Heute gelernt: Null - Race-Conditions bei Delegates


Thomas Wölfer
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.