c#怎样建立一个concurrentdictionary 集合字典变量
若以下回答无法解决问题,邀请你更新回答
1个回答
推荐于2016-07-07 · 知道合伙人软件行家
关注
展开全部
开发环境:.NET 4.0以上
说明:
在NET Framework 4内的System.Collections.Concurrent命名空间。
正如在MSDN文档,ConcurrentDictionary可实现一个线程安全的集合,可以由多个线程同时访问Key-value。
ConcurrentDictionary实现IDictionary<TKey, TValue>,并且它有一些独特的机制adding 、updating key/value。(下面是说明何时该用什么方法)
装况一:添加一个新的项目,只有当key不存在于字典中...
使用TryAdd。TryAdd接受键和值添加到字典中,如果该键不存在于字典中则返回fasle;若存在则返回true。
public bool TryAdd(TKey key, TValue value)
状况二:更新现有的key在字典中的Value...
使用TryUpdate。字典若有该key,并且给予条件式的更新,在这方法中要给予一个比较值当目前的值等同比较值(TValue comparisonValue)时则可以更新。
public bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue)
状况三:一个key/value要添加到字典中;如果该键不确定是否存在于字典中;若有存在则更新不存在则新增...
使用AddOrUpdate。AddOrUpdate有两个重载,两种重载接返会回value的值:
第一个重载的参数为AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
参数为Key以及两个委派;第一个委派的目的是当key不存在时所执行的委派并返回value(初始value)此委派Func<返回初始value, key>。
第二个委派Func<返回Value, key,oldValue>如果该key不存在于字典中则执行第一个委派(若存在则不跑;目的是给value初始值),然后会要return value(value的初始值);第二个委派是针对value值变化的方法,一样要return value(更改初始的value,为最后得到的value)。Func<返回Value, key, oldValue>
public TValue AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
2.第二个重载的参数为AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
第一个参数为key,第二个参数是当key不存在时,则此值为value的初始值,第三个为委派是执行变化(Func<返回Value, key,oldValue>)。
public TValue AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
状况四:在字典中要添加key的值,但若是key已经存在则取出value;否则则新增
第一个重载:GetOrAdd(TKEY,Func<TKey, TValue>valueFactory)
第一个参数为key,第二个参数为委派Func<value, key>,当key不存在时传入一变量为key,在对value做变化。并建立key及value,返回一value值。
2.第二个重载:GetOrAdd(TKEY,TValue)
第一个参数为key,第二个参数的目的是当key不存在时要新建key所给予的value。返回value。
public TValue GetOrAdd(TKEY,Func<TKey, TValue>valueFactory)
public TValue GetOrAdd(TKEY,TValue)
AddOrUpdate和GetOrAdd的每个操作对于修改/写入到字典中,ConcurrentDictionary所拥有的方法,可以确保线程安全(无锁的方式进行,在字典中读取数据)。
说明:
在NET Framework 4内的System.Collections.Concurrent命名空间。
正如在MSDN文档,ConcurrentDictionary可实现一个线程安全的集合,可以由多个线程同时访问Key-value。
ConcurrentDictionary实现IDictionary<TKey, TValue>,并且它有一些独特的机制adding 、updating key/value。(下面是说明何时该用什么方法)
装况一:添加一个新的项目,只有当key不存在于字典中...
使用TryAdd。TryAdd接受键和值添加到字典中,如果该键不存在于字典中则返回fasle;若存在则返回true。
public bool TryAdd(TKey key, TValue value)
状况二:更新现有的key在字典中的Value...
使用TryUpdate。字典若有该key,并且给予条件式的更新,在这方法中要给予一个比较值当目前的值等同比较值(TValue comparisonValue)时则可以更新。
public bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue)
状况三:一个key/value要添加到字典中;如果该键不确定是否存在于字典中;若有存在则更新不存在则新增...
使用AddOrUpdate。AddOrUpdate有两个重载,两种重载接返会回value的值:
第一个重载的参数为AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
参数为Key以及两个委派;第一个委派的目的是当key不存在时所执行的委派并返回value(初始value)此委派Func<返回初始value, key>。
第二个委派Func<返回Value, key,oldValue>如果该key不存在于字典中则执行第一个委派(若存在则不跑;目的是给value初始值),然后会要return value(value的初始值);第二个委派是针对value值变化的方法,一样要return value(更改初始的value,为最后得到的value)。Func<返回Value, key, oldValue>
public TValue AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
2.第二个重载的参数为AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
第一个参数为key,第二个参数是当key不存在时,则此值为value的初始值,第三个为委派是执行变化(Func<返回Value, key,oldValue>)。
public TValue AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
状况四:在字典中要添加key的值,但若是key已经存在则取出value;否则则新增
第一个重载:GetOrAdd(TKEY,Func<TKey, TValue>valueFactory)
第一个参数为key,第二个参数为委派Func<value, key>,当key不存在时传入一变量为key,在对value做变化。并建立key及value,返回一value值。
2.第二个重载:GetOrAdd(TKEY,TValue)
第一个参数为key,第二个参数的目的是当key不存在时要新建key所给予的value。返回value。
public TValue GetOrAdd(TKEY,Func<TKey, TValue>valueFactory)
public TValue GetOrAdd(TKEY,TValue)
AddOrUpdate和GetOrAdd的每个操作对于修改/写入到字典中,ConcurrentDictionary所拥有的方法,可以确保线程安全(无锁的方式进行,在字典中读取数据)。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询