Сначала вы проверяете, есть ли какие-либо прослушиватели событий для ParkingAddedEvent, и если они есть, вы будете вызывать событие. Эффект этого события зависит от слушателей.
Реализация, которая у вас есть, не является поточно-ориентированной. Следующее должно быть потокобезопасной альтернативой:
var handler = ParkingAddedEvent;
Thread.MemoryBarrier();
if (handler != null) {
handler(this, new ParkingAddedEventArgs(parking));
}
Я использую Thread.MemoryBarrier()
для предотвращения оптимизации компилятора, которая может устранить локальную переменную. Если это произойдет, код будет идентичен вашей текущей реализации.
Существует также другая проблема безопасности потока с инициализатором коллекции, но это проблема, только если метод AddParking()
вызывается из разных потоков.