IEnumerable.Chunk() в .NET 6
В .NET 6 для
IEnumerable<T> появился новый метод расширения Chunk(size). Этот метод на самом деле довольно простой, но в то же время мощный. На данный момент .NET 6 находится в предварительной версии. И заметьте, что эта функция доступна только в .NET 6. Ни в .NET 5, ни в .NET Core 3.1, ни в любой другой версии.Итак, мы можем написать такой код:
var list = Enumerable.Range(1, 100);Метод
var chunkSize = 10;
//Делим коллекцию на части по 10
foreach(var chunk in list.Chunk(chunkSize))
{
foreach(var item in chunk)
Console.WriteLine(item);
}
Chunk позволяет нам корректно разделить коллекцию, когда вы хотите обрабатывать элементы пакетами, особенно параллельно:var list = Enumerable.Range(1, 100);Метод принимает единственный параметр – размер пакета. При этом все пакеты, кроме последнего, будут иметь максимальное количество элементов. Последний пакет будет включать оставшиеся элементы, поэтому может быть меньше.
foreach(var chunk in list.Chunk(10))
{
Parallel.ForEach(chunk, (item) =>
{
//параллельная обработка
});
}
Вы, наверное, думаете, а почему не использовать
Skip иTake? Можно, но метод Chunk более лаконичен и делает код немного более читаемым.Источники: https://dotnetcoretutorials.com/2021/08/12/ienumerable-chunk-in-net-6/