c# - 将不同的值添加到并发字典中的列表中

标签 c# multithreading linq thread-safety

我尝试将小数点添加到ConcurrentDictionary内的列表中

ConcurrentDictionary<string, List<decimal>> fullList =
    new ConcurrentDictionary<string, List<decimal>>();

public void AddData(string key, decimal value)
{
    if (fullList.ContainsKey(key))
    {
        var partialList = fullList[key];
        partialList.Add(value);
    }
    else
    {
        fullList.GetOrAdd(key, new List<decimal>() { value });
    }
}
从技术上讲,上面的代码对我有用,但之所以这样做,是因为我不知道如何添加和更新GetOrAdd方法。我的问题是,考虑到我的更新是将一个项目添加到现有列表的末尾,我如何同时使用该方法?

最佳答案

您可以为此使用AddOrUpdate方法,如下所示:

fullList.AddOrUpdate(key, 
                     new List<decimal>() { value }, 
                     (key,list) => 
                     { 
                         list.Add(value); 
                         return list; 
                     });
本质上,当key丢失时,将创建一个仅包含一个元素value的新列表。否则,我们将添加到与当前keyvalue关联的列表中,然后返回列表。
有关此方法的文档,请查看here

关于c# - 将不同的值添加到并发字典中的列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64295225/

相关文章:

c# - 获取动画 GIF 的帧持续时间?

android - 在 SQLite 中使用事务在 JellyBean 中给出错误

c# - 为什么仅指定列的子集时 MigrationHistory 会导致 Linq 结果不同?

c# - 字典中不存在自定义键类 <string, bool>

c# - Unity for Android - 对象不跟随触摸输入

c# - 将对数据网格所做的更改反射(reflect)回数据集和数据表

linq - EF 和 Linq 中的术语

C++ 随机种子、全局对象和 SDL_Threads

c - APUE 对 linux 线程的描述有误吗?

c# - 使用 Linq 获取精化集