c# - 我们可以使用 Parallel.ForEach() 向列表中添加新元素吗?

标签 c# multithreading linq plinq

我的代码做的事情非常简单

列表已经有元素了。我在列表中有大约 25000 个元素(我希望有更多),每个元素都很小 (DateTime)。

List<DateTime> newList = new List<DateTime>();
Parallel.ForEach(list, l => newlist.Add(new DateTime(l.Ticks + 5000)));

也就是说,基于每个元素,我正在创建新元素并将它们添加到不同的列表中。 但是,这似乎不是一个好的编程方法。我遇到此异常一些 次,但不是每次。

IndexOutOfRangeException : {"Index was outside the bounds of the array."}

我们可以使用 Parallel.ForEach() 向列表添加元素吗?如果是,为什么我会遇到错误?如果不是,为什么?

最佳答案

在这种情况下你真正想要的是这样的:

newlist = list.AsParallel().Select(l => new DateTime(l.Ticks + 5000)).ToList();

尽管您应该测量性能以查看这种情况是否甚至受益于并行化。

关于c# - 我们可以使用 Parallel.ForEach() 向列表中添加新元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10149395/

相关文章:

c# - ConfigurationManager ConnectionString 抛出错误并返回 null

c# - C++/CLI 获取 "wrapper"类对象以显示在 C# 中

java - 如何在 Java 8 中创建阻塞后台加载程序?

c# - 在linq中以更新模式选择记录

c# - count() > 1 的表达式树

c# - 尝试使用 wpf 连接到扫描仪时出现错误代码

C# 面板对接问题

c# - 如何在另一个线程上渲染视觉对象

java - 如何创建线程安全的 JSP 页面

c# - 明显不与 LINQ 一起工作