@VladD итог. если у нас есть общий сервис, который нужно шарить и у него есть события то мы можем
1) использовать SyncRoot (я таки вспомнил как оно называется)
например его недостоаток то что мы можем затребовать syncRoot и вызвать что-то еще что тоже само запросит syncRoot и будет дидлок
2) использовать обычный внутренний лок (AsyncLock)) для модификации коллекции и событий
(тут я считаю что нельзя отделять событие от модификации, то есть следует отличать ситуацию "изменили коллекцию и запланировали уведомление" от транзакции "меняем коллекцию, уведомляем, получаем новое состояние системы,…
1) использовать SyncRoot (я таки вспомнил как оно называется)
например его недостоаток то что мы можем затребовать syncRoot и вызвать что-то еще что тоже само запросит syncRoot и будет дидлок
2) использовать обычный внутренний лок (AsyncLock)) для модификации коллекции и событий
(тут я считаю что нельзя отделять событие от модификации, то есть следует отличать ситуацию "изменили коллекцию и запланировали уведомление" от транзакции "меняем коллекцию, уведомляем, получаем новое состояние системы,…