求指点ConcurrentDictionary的用法

ohyoyo2014 2014-07-26 07:36:12


private void button1_Click(object sender, EventArgs e)
{


ConcurrentDictionary<string, int> allc = new ConcurrentDictionary<string, int>();
allc.TryAdd("duoduo", 2);
int t=allc.AddOrUpdate("duoduo", 1, (x,y)=>1);

int i = 0;
allc.TryGetValue("duoduo", out i);
textBox1.Text = "" + i+":"+t;

}






AddOrUpdate的第二个参数感觉就是一个摆设,这个参数有什么作用吗?
...全文
354 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2014-07-27
  • 打赏
  • 举报
回复
因为是并发的嘛,所以可能出现相同的Key,这个委托允许你遇到这种情况为冲突的原有Key产生一个新Value。
ohyoyo2014 2014-07-27
  • 打赏
  • 举报
回复
引用 3 楼 gomoku 的回复:
比如你想记录物品使用次数,则首先要判断物品是否已经在Dictionary里。 如果物品还未记录,要allc.TryAdd("钉子", 1); 如果物品已经记录,要allc["钉子"] += 1; 在多线程下,这些判断和操作要原子化。而AddOrUpdate就完成了以上操作:

// 如果钉子记录不存在,增加钉子记录并记为1;如果钉子记录存在,增量1。
allc.AddOrUpdate("钉子", 1, (key, val) => val + 1);
明白了,第二个参数是当key不存在时保存用的.谢谢你们.
gomoku 2014-07-27
  • 打赏
  • 举报
回复
比如你想记录物品使用次数,则首先要判断物品是否已经在Dictionary里。 如果物品还未记录,要allc.TryAdd("钉子", 1); 如果物品已经记录,要allc["钉子"] += 1; 在多线程下,这些判断和操作要原子化。而AddOrUpdate就完成了以上操作:

// 如果钉子记录不存在,增加钉子记录并记为1;如果钉子记录存在,增量1。
allc.AddOrUpdate("钉子", 1, (key, val) => val + 1);

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧