我正在尝试在 C# 中的列表中添加元素。我在 Parallel.ForEach 循环中执行此操作。我得到数组索引越界执行。有什么解决办法吗?
var processes = new List<Process>();
Parallel.ForEach(productList, new ParallelOptions { MaxDegreeOfParallelism = 30 }, product =>
{
// Some Logic
processes.Add(process);
}
最佳答案
一个List<T>
不是线程安全的。这意味着你不能调用它的 Add
同时来自多个线程的方法并期望它能够工作。
您应该将该列表替换为 ConcurrentBag<T>
。另一个选项是同步对列表的访问,例如使用 lock
陈述。但是,如果您所做的只是简单地将一个项目添加到循环中的列表中,则使用 Parallel.ForEach
没有多大意义。和一个 List<T>
.
关于c# - 在 C# 中的 Parallel.ForEach 中向列表中添加元素时出现数组索引越界异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57709035/