ConcurrentDictionaryAddOrUpdate中为更新部分添加了内容我查看了一些示例,但仍然无法实现AddOrUpdate函数。这是原始代码:dynamica=HttpContext;DictionaryuserDic=this.HttpContext.Application["UserSessionList"]asDictionary;如果(userDic!=null){如果(useDic.ContainsKey(authUser.UserId)){userDic.Remove(authUser.UserId);}}else{userDic=newDictionary();}userDic.Add(authUser.UserId,a.Session.SessionID.ToString());this.HttpContext.Application["UserDic"]=userDic;不确定要为更新部分添加什么:userDic.AddOrUpdate(authUser.UserId,a.Session.SessionID.ToString(),/***在这里添加什么?***/);任何指针将不胜感激。您需要传递一个Func,它返回更新时要存储在字典中的值。我认为在你的情况下(因为你不区分添加和更新)这将是:varsessionId=a.Session.SessionID.ToString();userDic.AddOrUpdate(authUser.UserId,sessionId,(key,oldValue)=>sessionId);也就是说,Func始终返回sessionId,因此Add和Update都设置相同的值。顺便说一句:MSDN页面上有一个示例。我希望,我没有遗漏您问题中的任何内容,但为什么不呢?它更容易、原子和线程安全(见下文)。userDic[authUser.UserId]=sessionId;无条件地将键/值对存储到字典中,如果该键已经存在则覆盖该键的任何值:使用索引器的设置器(参见:http://blogs.msdn.com/b/pfxteam/archive/2010/01/08/9945809.aspx)索引器也是primefaces。如果你传递函数,它可能不是:所有这些操作都是原语,并且对于ConcurrentDictionary上的所有其他操作都是线程安全的。每个操作的原始性唯一需要注意的是那些接受委托的操作,即AddOrUpdate和GetOrAdd。[...]这些委托在锁外调用请参阅:http://blogs.msdn.com/b/pfxteam/archive/2010/01/08/9945809.aspx我最终实现了一个扩展方法:staticclassExtensionMethods{//添加或覆盖publicstaticvoidAddOrUpdate(thisConcurrentDictionarydictionary,Kkey,Vvalue){dictionary.AddOrUpdate(key,value,(oldkey,oldvalue)=>value);对于那些感兴趣的人,我目前正在实施一个案例,这是使用“oldValue”又名现有值而不是强制使用新值的一个很好的例子(我个人不喜欢术语“oldValue”,因为它不是那么旧当它只是在pthreads中创建了几个处理器。以上就是C#学习教程:ConcurrentDictionaryAddOrUpdate中更新部分分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注—dictionaryCacheQueues.AddOrUpdate(uid,newConcurrentQueue(),(existingUid,existingValue)=>existingValue);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
