La Task Parallel Library es una biblioteca que apareció con .NET 4.0 y cuya misión es facilitar la vida a los programadores a la hora de construir aplicaciones multi-subproceso y con hilos.
La biblioteca es muy extensa pero tiene pequeñas joyas a las que les podemos sacar partido de manera directa y sencilla, sin necesidad de meternos en honduras.
Una de estas joyas es la versión paralela de un bucle For Each.
La idea es que si tenemos que procesar una lista de objetos de cualquier tipo (desde simples números o cadenas hasta objetos más complejos) y no nos importa en qué orden se procesen, sólo que se les aplique a todos una misma función, entonces el ForEach paralelo es lo que necesitamos para agilizar nuestra aplicación.
Este método cogerá una lista de objetos y los procesará usando múltiples hilos y por lo tanto sacando partido a sistemas multi-núcleo y multi-procesador, o bien usando de manera más eficiente el tiempo asignado a cada hilo en un procesador.
Un ejemplo sencillo sería este, para procesar una lista de colores:
class Program {
static void Main(string[]args)
{
ParallelLoop();
Console.ReadLine();
}
public static void ParallelLoop()
{
var colors = new List{"red", "white", "blue", "green", "yellow","black"};
System.Threading.Tasks.Parallel.ForEach(colors, clr => Console.WriteLine(clr));
}
}
Si lo ejecutamos repetidas veces vermos que todos ellos se procesan, pero cada vez en un orden diferente, en función de cómo se hayan ejecutado los hilos correspondientes:
Como vemos lo único que hay que hacer es pasar la lista y un delegado a una función (en este caso una expresión lambda) a Parallel.ForEach, y listo.
Fecha de publicación: