http://xgeeker.blogspot.com/2012/11/crear-y-ejecutar-una-consulta-plinq.html Concepto:

Parallel LINQ (PLINQ) es una implementación paralela de LINQ to Objects. PLINQ implementa el conjunto completo de operadores de consulta estándar de LINQ como métodos de extensión para el espacio de nombres T:System.Linq y tiene operadores adicionales para las operaciones paralelas. PLINQ combina la simplicidad y legibilidad de la sintaxis de LINQ con la eficacia de la programación paralela. De la misma forma que el código destinado a la biblioteca TPL (Task Parallel Library, biblioteca de procesamiento paralelo basado en tareas), las consultas PLINQ aumentan el grado de simultaneidad en función de la capacidad del equipo host.

En muchos escenarios, PLINQ puede aumentar significativamente la velocidad de las consultas LINQ to Objects utilizando todos los núcleos disponibles en el equipo host de una forma más eficaz. Este mayor rendimiento aporta al escritorio una alta capacidad de computo.

En el siguiente ejemplo se muestra cómo crear un consulta LINQ paralela simple utilizando el método de extensión AsParallel de la secuencia de origen y cómo ejecutarla utilizando el método ForAll<TSource>.


Ejemplo


C#
                    var source = Enumerable.Range(100, 20000);

           // Result sequence might be out of order.


var parallelQuery = from num in source.AsParallel()
                               where num % 10 == 0
                               select num;

           // Process result sequence in parallel
           parallelQuery.ForAll((e) => DoSomething(e));

           // Or use foreach to merge results first.

foreach (var n in parallelQuery)
           {
               Console.WriteLine(n);
           }

           // You can also use ToArray, ToList, etc// as with LINQ to Objects.

var parallelQuery2 = (from num in source.AsParallel()
                                 where num % 10 == 0
                                 select num).ToArray();

           // Method syntax is also supported

var parallelQuery3 = source.AsParallel().Where(n => n % 10 == 0).Select(n => n);



En este ejemplo se muestra el modelo básico para crear y ejecutar cualquier consulta LINQ paralela cuando la clasificación de la secuencia del resultado no es importante; las consultas no ordenadas son generalmente más rápidas que las ordenadas. La consulta crea particiones del origen en tareas que se ejecutan de forma asincrónica en varios subprocesos. El orden en que se completa cada tarea depende no solo de la cantidad de trabajo que se precisa para procesar los elementos de la partición, sino también de factores externos, como la forma en que el sistema operativo programa cada subproceso., Este ejemplo está diseñado para mostrar el uso y podría no ejecutarse más rápidamente que la consulta secuencial equivalente de LINQ to Objects. Para obtener más información sobre la aceleración, vea Introducción a la velocidad en PLINQ. Para obtener más información sobre cómo conservar el orden de los elementos de una consulta, vea
 

Compilar el código


  • Cree un proyecto de aplicación de consola.
  • Pegue el ejemplo de código después del método Main.
  • Agregue una llamada a SimpleQuery desde Main y presione F5.