gpt4 book ai didi

c# - 当数据异步更改时迭代类中数据的正确方法

转载 作者:太空宇宙 更新时间:2023-11-03 14:32:44 26 4
gpt4 key购买 nike

我有一个 C# 类,里面有一个字典。该类异步监听消息,这些消息在到达和处理时会更改字典中的数据。

对于使用此类实例循环访问字典中数据的应用程序,“正确”的方法是什么?我是否必须将它包装到另一个类中并实现某种枚举器?向类中添加类似 Pause 和 Resume 方法的方法是否合适,以便应用在想要遍历数据时可以调用?

最佳答案

好吧,无论何时迭代或修改字典,您都应该锁定字典。

像这样:

var d = new Dictionary<int, string>();

lock (d)
{
d.Add(1, "Q");
}

lock (d)
{
foreach (var p in d)
{
Console.WriteLine(p.Key + " => " + p.Value);
}
}

如果您的迭代要做一些实质性的事情,您应该在迭代之前复制。

IList<KeyValuePair<int, string>> d2;

lock (d)
{
d2 = d.ToList();
}

foreach (var p in d2)
{
Console.WriteLine(p.Key + " => " + p.Value);
}

关于c# - 当数据异步更改时迭代类中数据的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2230586/

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