试图了解 ConcurrentDictionary 的工作原理
Trying to understand how ConcurrentDictionary works
如果值不存在,我想将其初始化为 0。否则它应该增加现有值。
ConcurrentDictionary<int, int> dic = new ConcurrentDictionary<int, int>();
dic.AddOrUpdate(1, 0, (key, old) => old++);
dic.AddOrUpdate(2, 0, (key, old) => old++);
此时,字典有键值 1 和 2,每个值为 0。
dic.AddOrUpdate(1, 0, (key, old) => old++);
此时键 1 的值应为 1,而键 2 的值应为 0,但是两者的值均为 0。知道为什么吗?
你误会了:
dic.AddOrUpdate(1, 0, (key, old) => old++);
At this point for the key 1 the value should be 1
当你使用old++
时,它return存储修改前的原始值。这就好像你做了相当于:
dic.AddOrUpdate(1, 0, (key, old) =>
{
var original = old;
old = old + 1;
return original;
});
你想要 ++old
这将 return 修改后的值或只使用
dic.AddOrUpdate(1, 0, (key, old) => old + 1);
试试这个:
dic.AddOrUpdate(1, 0, (key, old) => old + 1);
我想那是因为old是Func<>的参数,不能修改。
如果值不存在,我想将其初始化为 0。否则它应该增加现有值。
ConcurrentDictionary<int, int> dic = new ConcurrentDictionary<int, int>();
dic.AddOrUpdate(1, 0, (key, old) => old++);
dic.AddOrUpdate(2, 0, (key, old) => old++);
此时,字典有键值 1 和 2,每个值为 0。
dic.AddOrUpdate(1, 0, (key, old) => old++);
此时键 1 的值应为 1,而键 2 的值应为 0,但是两者的值均为 0。知道为什么吗?
你误会了:
dic.AddOrUpdate(1, 0, (key, old) => old++);
At this point for the key 1 the value should be 1
当你使用old++
时,它return存储修改前的原始值。这就好像你做了相当于:
dic.AddOrUpdate(1, 0, (key, old) =>
{
var original = old;
old = old + 1;
return original;
});
你想要 ++old
这将 return 修改后的值或只使用
dic.AddOrUpdate(1, 0, (key, old) => old + 1);
试试这个:
dic.AddOrUpdate(1, 0, (key, old) => old + 1);
我想那是因为old是Func<>的参数,不能修改。