试图了解 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<>的参数,不能修改。