2011-10-25 2 views
0

У меня есть обработка Singleton класса. Подписываются и отменяются запросы от разных клиентов, работающих в разных потоках. Синглтон содержит коллекцию подписчиков. Перед добавлением или удалением класс должен подтвердить, что элемент еще не был добавлен или удален.Какая потокобезопасная коллекция подходит для этого сценария?

Обычно я реализую это, используя вызов List или HashSet Содержит перед каждой операцией, но если я хочу использовать один из новых классов в пространстве имен System.Collections.Concurrent, единственным вариантом, который я вижу, является использование ConcurrentDictionary с фиктивным значением.

Это мой лучший вариант или есть что-то, что я пропускаю? Кстати, производительность на самом деле не является фактором для рассмотрения.

ответ

0

Я думаю, вы должны придерживаться ConcurrentDictionary ...

+0

"и в отличие от комплектов, сумки поддерживают дубликаты". vs. «Перед добавлением или удалением класс должен проверить, что элемент еще не был добавлен или удален». – CodesInChaos

0

Почему бы вам не использовать ConcurrentDictionary поддерживается с Блокировка очереди. BlockingQueue, похоже, соответствует вашей схеме производителя/потребителя и ConcurrentDictionary для ваших поисков.

+0

Я не уверен, что мой сценарий соответствует схеме производителя/потребителя. Запросы на отмену подписки не должны следовать тому же порядку, что и запросы «Подписаться», поэтому я не могу понять, в чем преимущество использования очереди в этом случае. Я не вижу дополнительного преимущества по сравнению с использованием только словаря. – Mike

Смежные вопросы