gpt4 book ai didi

c# - LINQ 和字典线程安全

转载 作者:太空宇宙 更新时间:2023-11-03 22:06:43 25 4
gpt4 key购买 nike

我有一个 Dictionary<int, bool>

我有一个 InvalidOperationException collection was modified已处理但令我困惑的错误。

我能想到的唯一代码如下:

lock (lockObject)
{
AllowInputs[InputNumber] = true;
}

if (AllowInputs.Values.All(x => x == true))
{
//Do stuff
}

如果一个线程在 lock 语句中修改一个值,而另一个线程正在执行 All(x => x == true)这会导致 "Collection was modified"错误?

最佳答案

是的,你需要在读和写的时候都加锁(在同一个对象上)。对 All 的调用在内部迭代字典中的所有项目。如果字典被另一个线程修改,迭代器将失效并抛出异常。

试试这个:

lock (lockObject)
{
if (AllowInputs.Values.All(x => x == true))
{
//Do stuff
}
}

关于c# - LINQ 和字典线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8193029/

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