C# for 和并行 for 循环与批处理逻辑

C# for and parallel for loops with batches logic

我编写了一个 for 循环,它处理将项目以 20 个为一组添加到列表中,如下所示:

  for (int i = 0; i < filteredList.Count; i = i + 20)
  {
    newlist.Add(GetResponse(filteredList.Skip(i).Take(20)));
  }

这对于较小的列表来说绝对没问题。所以现在我想在处理包含 10-15000 项的较大列表时使用并行 for 循环来加快处理速度?

我试过这样的事情:

Parallel.For(0,filteredList.Count, i=>{
i+=20;
newlist.Add(GetResponse(filteredList.Skip(i).Take(20)));
});

但这并没有给我想要的结果...除了常规的 for 循环之外,还有什么方法可以以更快的方式执行批量插入,从而比普通的 for 循环缩短执行时间?

List<T> 不是 线程安全的,这就是为什么

  Parallel.For(... {
    ...
    newlist.Add(GetResponse(filteredList.Skip(i).Take(20)));
    ...
  });

是一种错误的技术。尝试使用 Parallel Linq (Plinq) 代替:

newList.AddRange(filteredList
  .AsParallel()
  .Select((value, index) => new {
     value = value,
     index = index })
  .GroupBy(item => item.index / 20)
  .Select(chunk => GetResponse(chunk.Select(item => item.value))));