Что использовать для подписки на данные - ConcurrentDictionary или?
От: Goldy  
Дата: 19.12.18 07:55
Оценка:
Здрастувуйте,
Есть следующая задача:
Пользователям нужно работать с подписками на потоки данных (подписаться/отписаться), при этом если параметры подписки совпадают то подписка должна шариться между пользователями.
Что то вроде:
ConcurrentDictionary<subsriptionKey, ImmutableList<UserInfo>>

При этом должны выполняться следующие условия:
— при первой подписке (subsriptionKey нет в словаре) должен вызываться пользовательский метод Action который осуществляет реальный вызов подписки на удаленном сервере, пользователь добавляется в список подписчиков
— при приходе данных от сервера по ключу из словаря выбираем всех подписанных пользователей и отсылаем им данные
— все последующие подписки просто добавляют пользователя в список (пользователи могут дублироваться — один пользователь может несколько раз запрашивать подписку с одинаковыми параметрами, при этом он должен столько же раз отписаться)
— при отписке соответствующий пользователь удаляется из списка подписчиков с заданным колючем подписки, при этом если список пользователь пустой, то должен вызываться пользовательский метод Action который осуществляет реальный вызов отписки на удаленном сервере, и данный ключ подписки удаляется из словаря.

Методы подписки/отписки должны вызываться потокобезопасно.
Есть ли готовые реализации для решения данной проблемы?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.