Я просто читал страницу на events на MSDN, и я наткнулся на фрагмент кода примера, который меня озадачивает.Копирование делегатов
Код в вопросе заключается в следующем:
// 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;
Я понимаю намерения кода, но я не вижу, как эта конкретная строка делает копию чего-либо. Все, что он делает, это копирование ссылки ; на самом деле это не делает глубокую копию экземпляра делегата. Поэтому с этой целью на самом деле это вообще не препятствует состоянию гонки.
Я пропустил что-то очевидное здесь?
Может ли RaiseCustomEvent установить значение null на другой поток, прежде чем у текущего метода есть возможность его запустить? –