我有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);