Как передать разные диапазоны на parallel.for?

Мне нужно обрабатывать один файл параллельно, посылая счет пропуска, как 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
}

Как можно отправить skip а также take считать в параллельном процессе согласно моему требованию?

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
}
Другие вопросы по тегам