Он показывает, как "правильно" генерировать событие, безопасно по отношению к потокам. А именно сохранить цепочку делегатов, подписанных на событие, во временную переменную через вызов Thread.VolatileRead. Я, честно, никогда так не делал. Я всегда событию заранее задавал начальное значение делегата: public event Action MyEvent = delegate {}; Что приводило к меньшему числу проверок на null, и всякой возни с VolatileRead.
Он показывает, как "правильно" генерировать событие, безопасно по отношению к потокам. А именно сохранить цепочку делегатов, подписанных на событие, во временную переменную через вызов Thread.VolatileRead. Я, честно, никогда так не делал. Я всегда событию заранее задавал начальное значение делегата: public event Action MyEvent = delegate {}; Что приводило к меньшему числу проверок на null, и всякой возни с VolatileRead.
Он показывает, как "правильно" генерировать событие, безопасно по отношению к потокам. А именно сохранить цепочку делегатов, подписанных на событие, во временную переменную через вызов Thread.VolatileRead. Я, честно, никогда так не делал. Я всегда событию заранее задавал начальное значение делегата: public event Action MyEvent = delegate {}; Что приводило к меньшему числу проверок на null, и всякой возни с VolatileRead.
Чем мой способ плох? Скажите пожалуйста
ну как обычно - к проблемам доступа к коллекциям в многопоточном окружении
Просто я вообще не вижу смысла проверок события на то, есть ли в нем какие либо подписчики или нет? Почему microsoft сразу не сделали так, чтобы событие инициализировать delegate {}