Estaba leyendo una página en events en MSDN, y encontré un fragmento de código de ejemplo que me deja perplejo.Copia de delegados
El código en cuestión es la siguiente:
// 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<CustomEventArgs> handler = RaiseCustomEvent;
entiendo las intenciones del código, pero no veo cómo esa línea particular está haciendo una copia de cualquier cosa. Todo lo que hace es copiar la referencia ; en realidad no está haciendo una copia profunda de la instancia delegada. Entonces para ese fin, en realidad no previene la condición de carrera en absoluto.
¿Me falta algo obvio aquí?
¿Puede RaiseCustomEvent establecerse en nulo en un subproceso diferente antes de que el método actual tenga la oportunidad de desencadenarlo? –