我正在寻找一种方法来获得并发收集 in C#或者至少是一个支持的集合并发枚举器。现在我得到了InvalidOperationException
当我正在迭代的集合发生变化时。
我可以深度复制该集合并使用私人副本,但我想知道是否有更好的方法
代码片段:
foreach (String s in (List<String>) callingForm.Invoke(callingForm.delegateGetKillStrings))
{
//do some jazz
}
--edit--
我接受了答案,但也发现我需要确保写入集合的代码也需要尝试获取锁。
private void addKillString(String s)
{
lock (killStrings)
{
killStrings.Add(s);
}
}
除了进行深度复制之外,最好的选择可能是锁定集合:
List<string> theList = (List<String> )callingForm.Invoke(callingForm.delegateGetKillStrings);
lock(theList.SyncRoot) {
foreach(string s in theList) {
// Do some Jazz
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)