繁体   English   中英

试图了解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++); 

此时,密钥1的值应为1

当您使用old++它会返回要存储的修改之前的原始值。 就像您做了以下操作一样:

dic.AddOrUpdate(1, 0, (key, old) => 
{
    var original = old;
    old = old + 1;
    return original;
});

您想要++old ,它将返回修改后的值或只使用

dic.AddOrUpdate(1, 0, (key, old) => old + 1);

尝试这个 :

dic.AddOrUpdate(1, 0, (key, old) => old + 1);

我认为这是因为old是Func <>的参数,因此无法修改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM