我目前正在使用ConcurrentDictionary
来保存已使用我的API进行身份验证的登录名集合。我这样做是为了防止来自其他Web客户端的重复登录(系统架构的要求)。如果用户使用已经登录的登录进行身份验证"他们有选择......
我正在使用ConcurrentDictionary
因为它应该是线程安全的,这在多个客户端访问API的环境中很重要。
我要问的是,是否需要ConcurrentDictionary
,因为我在删除集合中与给定密钥匹配的所有项目时遇到了麻烦。在这种情况下是否需要ConcurrentDictionary
?如果没有,那么Dictionary
是否足够?如果没有,并且需要ConcurrentDictionary
,是否有一种方法可以删除与给定密钥匹配的所有条目?我只能看到TryRemove()
,它似乎只删除了一个条目。
答案 0 :(得分:1)
直接回答你的问题:
是的,您需要
ConcurrentDictionary
。您正在跨多个线程共享状态。
请记住,字典每个键有一个条目。这是对词典的定义,而ConcurrentDictionary并没有改变它。
以下是对您的要求的更全面和更完整的答案。
整个解决方案是短视的,因为您与会话基础架构没有任何关联,无法知道用户的会话何时超时并有效地导致它们被注销。此外,如果您考虑部署到可以旋转新实例的云平台,则无法与您的应用的其他实例进行协调。
换句话说,如果不破坏此功能,您就会陷入难以扩展应用的境地。
处理单个会话要求的最有效方法之一可能是使用您的数据库:
您会发现需求比表面上的声音要多得多。你不能像网络空间中的桌面应用程序一样思考 - 这正是这个要求的来源。