使用Parallel.ForEach创建CSV文件

时间:2017-08-25 15:06:48

标签: c# parallel.foreach

我有dataTable,我想使用Parallel.ForEach.

创建一个包含额外字段的新列表

示例:

Parallel.ForEach(dt.AsEnumerable().AsEnumerable(), drow =>
{

Create new list

});

1 个答案:

答案 0 :(得分:1)

List<T> 不是线程安全的,这就是为什么Parallel.ForEach不容易与List<T>结婚的原因。尝试使用 Linq 及其并行版 PLinq ,让.Net为您工作;像这样的东西:

 var list = dt
  .AsEnumerable() 
  .AsParallel()
  .AsOrdered() // if you want to preserve rows order
  .Select(drow => string.Join(",", drow[1], drow[5], drow[11], ExtraData(drow[5])))
  .ToList();

如果您想将list保存为文件,请使用File类:

 using System.IO;

 ...

 string fileName = @"C:\MyFile.csv";

 File.WriteAllLines(fileName, list);  

在上面的玩具示例中,我假设我们希望基于ExtraData(drow[5])丰富的第2,第4和第12列的CSV,并且所有列的值都不包含"和{ {1}}字符