PLINQ
Última actualización
Última actualización
PLINQ (Parallel LINQ) es parte del TPL (Task Parallel Library) en .NET, permite que tu código ejecute consultas sobre colecciones de datos en paralelo, es decir, utilizando múltiples hilos o procesadores a la vez para realizar la tarea más rápidamente.
Usar
el método AsParallel()
para convertir una colección enumerable en una versión que pueda ser procesada en paralelo.
Este ejemplo filtra los números pares de una colección de enteros del 1 al 100, utilizando procesamiento en paralelo.
A diferencia de las consultas LINQ regulares que se ejecutan de inmediato, las consultas PLINQ esperan hasta que realmente necesitas los resultados para ejecutarse.
Las consultas PLINQ son diferidas, por lo que necesitas forzar su ejecución para obtener resultados. Esto se puede hacer con métodos como ToList()
, ToArray()
, o un bucle foreach
:.
Este código fuerza la ejecución de la consulta PLINQ anterior, materializando el resultado en una lista.
Cuando usas PLINQ, el orden en que se procesan los datos puede cambiar debido a que se están manejando en paralelo. Si el orden de los resultados es importante, como seguir la secuencia de una lista de tareas, usarías AsOrdered()
para mantenerlo. Si el orden no importa, como en una lista de compras donde solo importa que no olvides nada, usamos AsUnordered()
para permitir que PLINQ optimice cómo maneja las tareas, potencialmente haciéndolo aún más rápido.
Controlar el orden de los resultados con AsOrdered()
para mantener el orden original o AsUnordered()
para permitir que el sistema optimice el procesamiento sin mantener el orden:
Este código mantiene el orden de los elementos mientras filtra los números pares.
Limitar el paralelismo te permite controlar cuántos hilos o procesadores se utilizan para la tarea, lo que puede ser útil si quieres asegurarte de que otras tareas o aplicaciones en tu computadora también tengan recursos para funcionar bien.
Este ejemplo limita el procesamiento paralelo a usar máximo 2 núcleos.
Trabajar en paralelo puede complicar el manejo de errores.
AggregateException
es una manera de recopilar y manejar múltiples errores que pueden ocurrir durante la ejecución de tus consultas PLINQ, permitiéndote lidiar con ellos de manera eficiente.
Este código intenta ejecutar una consulta que puede lanzar una excepción específica, y la maneja adecuadamente.