如何在parallel上传递不同的范围。

时间:2015-07-07 09:06:18

标签: c# parallel-processing plinq parallel-extensions

我需要通过发送跳过计数来并行处理单个文件,如1-1000,1001-2000,2001-3000等

并行流程代码

var line = File.ReadAllLines("D:\\OUTPUT.CSV").Length;
Parallel.For(1, line, new ParallelOptions { MaxDegreeOfParallelism = 10 }, x              
=> {
  DoSomething(skip,take);
});

功能

public static void DoSomething(int skip, int take)
{
     //code here
}

如何根据我的要求在并行流程中发送skiptake计数?

1 个答案:

答案 0 :(得分:1)

您可以使用PLINQ轻松完成这些操作。如果您想要批次1000,您可以这样做:

const int BatchSize = 1000;

var pageAmount = (int) Math.Ceiling(((float)lines / BatchSize));
var results = Enumerable.Range(0, pageAmount)
                        .AsParallel()
                        .Select(page => DoSomething(page));

public void DoSomething(int page)
{
    var currentLines = source.Skip(page * BatchSize).Take(BatchSize);
    // do something with the selected lines
}