In alcune applicazioni devo mandare verso i servizi grosse quantità di dati da elaborare e aumentare il timeout dei servizi non è cosa carina.
Fossero delle applicazioni in uso a degli utenti avrei pensato di passare ad una gestione asincrona delle chiamate, ma essendo delle applicazioni che girano “unattended” ho cercato una soluzione più facile.
Ho pensato di dividere gli array da mandare al server in sotto-liste più piccole e LINQ e i suoi Extension Methods mi sono venuti in aiuto.
static class LinqExtensions
{
public static IEnumerable<IEnumerable<T>> SplitByPartsCount<T>(this IEnumerable<T> list, int partsCount)
{
int i = 0;
var splits = from item in list
group item by i++ % partsCount into part
select part.AsEnumerable();
return splits;
}
public static IEnumerable<IEnumerable<T>> SplitByElementsCount<T>(this IEnumerable<T> list, int elementsCount)
{
var pos = 0;
while (list.Skip(pos).Any())
{
yield return list.Skip(pos).Take(elementsCount);
pos += elementsCount;
}
}
}
Con queste due funzioni è possibile dividere una lista in un certo numero di parti o di indicare il numero di elementi desiderati di ogni lista. Se avete dei nomi migliori per le funzioni mandatemele pure
L’ispirazione è venuta da qui e qui.
Technorati Tags:
LINQ,
Split