Какой потокобезопасный набор подходит для этого сценария?
У меня есть одноэлементный класс, обрабатывающий запросы подписки и отмены подписки от разных клиентов, работающих в разных потоках. Синглтон содержит коллекцию подписчиков. Перед добавлением или удалением класс должен проверить, что элемент еще не был добавлен или удален.
Обычно я реализую это с помощью вызова List или HashSet, вызывающего Contains перед каждой операцией, но если я хочу использовать один из новых классов в пространстве имен System.Collections.Concurrent, единственная опция, которую я вижу, - это использовать ConcurrentDictionary с фиктивным значение.
Это мой лучший вариант или я что-то пропускаю? Кстати, производительность не является важным фактором для рассмотрения.
2 ответа
Я думаю, что вы должны придерживаться ConcurrentDictionary
...
Почему вы не используете ConcurrentDictionary с поддержкой очереди блокировки. Кажется, что Blocking Queue соответствует схеме вашего производителя / потребителя и ConcurrentDictionary для ваших поисков.