1

可能重复:
LINQ 分区列表到 8 个成员的列表中。

我有一个IEnumerable<T>,我想将它转换为一个IEnumerable<List<T>>,其中每个 List 是一批项目,其顺序与原始枚举数相同。每个批次的长度应该是batchSize项目,除了最后一批应该包含剩余项目,因此它可能小于batchSize.

底层存储不是数据库或其他存储,我可以将批处理推送到系统的较低级别。相反,我需要自己累积批次,因为它是一个对象流,我一次只能获取一个。

序列很长,获取需要一段时间,所以我无法List<T>提前将整个可枚举打包到一个或数组中。相反,我想获取batchSize结果,然后立即开始处理第一批。

我可能会决定稍后使获取与处理异步(以便处理第 1 批和获取第 2 批可以并行发生)但现在我只是在寻找单线程解决方案。

关于如何高效、优雅地进行这种批处理、流式枚举的任何建议?理想情况下,我想将它打包成一个我可以重复使用的扩展方法,例如

public static IEnumerable<T> Batch<T>(this IEnumerable<T> source, int count);
4

0 回答 0