Возможный дубликат:
Список разделов LINQ в списки из 8 участников.
У меня есть IEnumerable<T>, и я хотел бы преобразовать его в IEnumerable<List<T>>, где каждый список представляет собой набор элементов в том же порядке, что и исходный перечислитель. Каждая партия должна состоять из batchSize элементов, за исключением последней партии, которая должна содержать оставшиеся элементы, поэтому она может быть меньше batchSize.
Базовое хранилище не является базой данных или другим хранилищем, где я могу передать пакетную обработку на более низкий уровень системы. Вместо этого мне нужно собирать пакеты самостоятельно, потому что это поток объектов, которые я могу извлекать только по одному за раз.
Последовательность очень длинная, и выборка занимает некоторое время, поэтому я не могу заранее упаковать все перечисляемое в List<T> или массив. Вместо этого я хотел бы получить batchSize результатов, а затем сразу же начать обработку первого пакета.
Позже я могу решить сделать выборку асинхронной по отношению к обработке (чтобы обработка пакета 1 и выборка пакета 2 могли происходить параллельно), но сейчас я просто ищу однопоточное решение.
Любые предложения о том, как сделать это пакетное, потоковое перечисление эффективно и элегантно? В идеале я хотел бы упаковать его в метод расширения, который я могу использовать повторно, например.
public static IEnumerable<T> Batch<T>(this IEnumerable<T> source, int count);