gpt4 book ai didi

c# - ConcurrentDictionary 在 GetOrAdd 之后编辑值是线程安全的吗?

转载 作者:太空狗 更新时间:2023-10-29 23:56:33 24 4
gpt4 key购买 nike

我正在使用并发字典的 GetOrAdd 方法来检索值列表,然后引用我正在编辑的值列表。这样做是线程安全的吗?

第一种方法是添加一个值,第二种方法是清除列表。

using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Threading.Tasks;
using Test.Web.Services;

namespace Test.Web.Messaging
{
public class Dispatch
{
private static readonly ConcurrentDictionary<string, IList<Message>> Messages = new ConcurrentDictionary<string, IList<Message>>();

public static void AddMessage(string id, Message value)
{
var msgs = Messages.GetOrAdd(id, new List<Message>());
msgs.Add(value);
}

public static void Send(string id)
{
var msgs = Messages.GetOrAdd(id, new List<Message>());
foreach (var msg in msgs)
{
Connection.Send(id, msg);
}
msgs.Clear();
}
}
}

最佳答案

字典不为存储的值提供保护。它唯一管理的是确保键到值的映射保持一致。您仍然需要使用适当的锁定来保护存储的对象的数据。

关于c# - ConcurrentDictionary 在 GetOrAdd 之后编辑值是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23374624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com