Parallel.ForEach en C#
Parallel.ForEach permite procesar en paralelo todos los elementos de una colección.
Divide automáticamente el trabajo en múltiples hilos para aprovechar la concurrencia y acelerar el
procesamiento en colecciones grandes.
Ejemplo básico
var numeros = Enumerable.Range(1, 10);
Parallel.ForEach(numeros, n => {
Console.WriteLine($"Número: {n}, Hilo: {Thread.CurrentThread.ManagedThreadId}");
});
Cada elemento se procesa potencialmente en un hilo diferente, acelerando tareas independientes.
Consideraciones importantes
Las acciones deben ser independientes o manejar sincronización adecuadamente. Acceder a recursos compartidos requiere mecanismos seguros como locks o colecciones concurrentes.
Buenas Prácticas
Usa Parallel.ForEach para cargas pesadas en colecciones grandes. Controla el grado de paralelismo si la carga del sistema es alta. Evalúa si la sobrecarga de sincronización es justificable.