重複の可能性:
8 つのメンバーのリストへの LINQ パーティション リスト。
があり、IEnumerable<T>
それを に変換したいと思いますIEnumerable<List<T>>
。各 List は、元の列挙子と同じ順序の項目のバッチです。残りのアイテムを含む最後のバッチを除いて、各バッチはbatchSize
アイテムの長さである必要があるため、 よりも小さい場合がありますbatchSize
。
基礎となるストアは、システムの下位レベルにバッチ処理をプッシュできるデータベースやその他のストアではありません。代わりに、自分でバッチを蓄積する必要があります。これは、一度に 1 つずつしか取得できないオブジェクトのストリームであるためです。
シーケンスは非常に長く、フェッチには時間がかかるため、List<T>
事前に列挙型全体を or 配列にパッケージ化することはできません。batchSize
代わりに、結果を取得してすぐに最初のバッチの処理を開始したいと考えています。
後でフェッチを処理に対して非同期にすることを決定するかもしれません (バッチ 1 の処理とバッチ 2 のフェッチを並行して実行できるようにするため) が、今のところ、シングル スレッドのソリューションを探しているだけです。
このバッチ化されたストリーミング列挙を効率的かつエレガントに行う方法について何か提案はありますか? 理想的には、再利用できる拡張メソッドにパッケージ化したいと思います。
public static IEnumerable<T> Batch<T>(this IEnumerable<T> source, int count);