首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C# List.AddRange in Parallel.For发生ArgumentException

是因为在并行循环中,多个线程同时尝试修改同一个List的内容,导致冲突和异常。这是由于List不是线程安全的数据结构,不支持并发修改操作。

为了解决这个问题,可以采取以下几种方法:

  1. 使用线程安全的数据结构:可以使用ConcurrentBag、ConcurrentQueue等线程安全的集合类来替代List,这些集合类在并发环境下能够提供安全的操作。
  2. 使用锁机制:在并行循环中,可以使用lock关键字或Monitor类来保护对List的访问,确保同一时间只有一个线程能够修改List的内容。
  3. 使用并行集合:.NET Framework提供了一些并行集合类,如ParallelEnumerable.AsParallel()方法可以将普通的集合转换为并行集合,从而在并行循环中安全地进行修改操作。
  4. 使用分区操作:可以将List分成多个子集,每个线程处理一个子集,最后再将结果合并到一个List中。这样可以避免多个线程同时修改同一个List的问题。

总结起来,为了避免C# List.AddRange在Parallel.For中发生ArgumentException,我们可以使用线程安全的数据结构、锁机制、并行集合或分区操作来保证并行循环的安全性。在具体实现中,可以根据实际需求选择合适的方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C#中如何使用Parallel.For和Parallel.ForEach

C#中如何使用Parallel.For和Parallel.ForEach 利用C#中的无锁,线程安全的实现来最大化.NET或.NET Core应用程序的吞吐量。 ?....NET Core中的Parallel.For和Parallel.ForEach Parallel.For循环执行可能并行运行的迭代。您可以监视甚至操纵循环的状态。...C#中的Parallel.ForEach与foreach 考虑以下方法,该方法接受整数作为参数,如果它是质数,则返回true。...限制C#中的并行度 并行度是一个无符号整数,表示查询在执行过程中应利用的最大处理器数量。换句话说,并行度是一个整数,表示将在同一时间点执行以处理查询的最大任务数。...默认情况下,Parallel.For和Parallel.ForEach方法对衍生任务的数量没有限制。

5.8K20

基础:C# try catch finally异常处理(Exception)

本文主要介绍C# try catch finally异常处理(Exception)。...1、C# Exceptions 执行C# 代码时,可能会发生不同的错误异常:程序员编写的编码错误,由于输入错误引起的错误或其他不可预见的情况。 发生错误时,C# 通常会停止并生成错误消息。...技术术语是:C# 将引发异常(引发错误)。 2、C# try catch try语句允许定义要执行的错误代码块。 如果在try块中发生错误,则catch语句允许定义要执行的代码块。...C# 中提供了许多异常类型: 异常类 描述 SystemException 其他用户可处理的异常的基本类 ArgumentException 方法的参数是非法的 ArgumentNullException...ArgumentException 所有参数异常的基类。 ArgumentNullException 在参数为空(不允许)的情况下,由方法引发。

14510

金三银四面试:C#.NET面试题高级篇2-多线程

9.多线程并行(Parallelism)和并发(Concurrency)的区别 10.C# Parallel.For和普通For的区别 1.说说常用的锁,lock是一种什么样的锁?...9、多线程并行(Parallelism)和并发(Concurrency)的区别 并行:同一时刻有多条指令在多个处理器上同时执行,无论从宏观还是微观上都是同时发生的。...10、C# Parallel.For和普通For的区别 Parallel类是.NET 4中新增的抽象线程类。Parallel.For()方法类似于C#的for循环语句,也是多次执行一个任务。...但是使用Parallel.For()方法,可以并行运行。...对于Parallel.For、Parallel.Foreach的使用应该要特别小心,它们的优势是处理列表很长,且对列表内的元素进行很复杂的业务逻辑,且不会使用共享资源,只针对自身的业务逻辑处理,方才能提升效率

2.3K30

如何获取 C# 类中发生数据变化的属性信息

可以看到,在我们对 Sample 类进行初始化赋值时,记录了两次关于类属性的数据变更记录,而当我们进行重新赋值时,只有属性 A 发生了数据改变,因此只记录了属性 A 的数据变更记录。...虽然这里已经达到我们的目的,但是如果采用这种方式的话,相当于原先项目中需要实现数据记录功能的类的属性声明方式全部需要重写,同时,基于 C# 本身已经提供了自动属性的方式来简化属性声明,结果现在我们又回到了传统属性的声明方式...因此,既然通过一个个属性进行比较的方式过于繁琐,这里我们通过反射的方式直接对比修改前后的两个实体类,批量获取发生数据变更的属性信息。...我们最终想要实现的是用户可以看到关于某个表单的字段属性数据变化的过程,而我们定义在 C# 类中的属性有时候需要与实际页面上显示的字段名称进行映射,以及某些属性其实没有必要记录数据变化的情况,这里我通过添加自定义特性的方式...attributeInfo.Ignore) properties.Add(i); } // 2、判断指定的属性数据是否发生变更 // foreach

3.4K40

C#的扩展方法解析

子类的实现与它父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。...1.扩展方法的基本原则:       (1).C#只支持扩展方法,不支持扩展属性、扩展事件、扩展操作符等。      ...(3).C#编译器查找静态类中的扩展方法时,要求这些静态类本身必须具有文件作用域。       (4).C#编译要求“导入”扩展方法。...(静态方法可以任意命名,C#编译器在寻找方法时,需要花费时间进行查找,需要检查文件作用域中的所有的静态类,并扫描它们的所有静态方法来查找一个匹配)       (5).多个静态类可以定义相同的扩展方法。...二.扩展方法原理解析:   “扩展方法”是C#独有的一种方法,在扩展方法中会使用ExtensionAttribute这个attribute。

1.9K70

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券