c# - 在 C# 中的 Parallel.ForEach 中向列表中添加元素时出现数组索引越界异常

标签 c# indexoutofboundsexception parallel.foreach

我正在尝试在 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/

相关文章:

c# - 如何在不安装的情况下在 WPF 应用程序中包含外部字体

java - 使用 Java 8 构造时创建 Bean 时出现 ArrayOutOfBoundsException

c# - 如何防止 Parallel.ForEach 循环在运行时更改任务数?

c# - 如何用递归方法实现并行?

c# - Linq-to-Sql:使用 LinqDataSource 以编程方式检索数据

c# - 在 Windows 窗体中选择和更新数据表

c# - Xamarin 圆形图像按钮

java.lang.StringIndexOutOfBoundsException

Java - 并行数组上的 ArrayIndexOutOfBounds 错误

c# - Parallel.ForEach 中的多个异步等待链接