我有一个C#类,里面有一个字典。该类异步侦听消息,这些消息在到达和处理时会更改字典中的数据。
使用此类实例迭代字典数据的应用程序的“正确”方法是什么?我是否必须将其包装到另一个类中并实现某种枚举器?将Pause和Resume方法之类的东西添加到app想要迭代数据时可以调用的类是否合适?
答案 0 :(得分:1)
好吧,你应该在迭代或修改它时锁定字典。
像这样:
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);
}
答案 1 :(得分:0)
另一种选择是在迭代之前复制数据。
答案 2 :(得分:0)
客户端如何迭代数据有两个选项