Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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>.
![]() |
---|
En esta documentación, se utilizan expresiones lambda para definir delegados en la PLINQ.Si no está familiarizado con las expresiones lambda en C# o Visual Basic, vea Expresiones lambda en PLINQ y TPL. |
Ejemplo
Sub SimpleQuery()
Dim source = Enumerable.Range(100, 20000)
' Result sequence might be out of order.
Dim parallelQuery = From num In source.AsParallel()
Where num Mod 10 = 0
Select num
' Process result sequence in parallel
parallelQuery.ForAll(Sub(e)
DoSomething(e)
End Sub)
' Or use For Each to merge results first
' as in this example, Where results must
' be serialized sequentially through static Console method.
For Each n In parallelQuery
Console.Write("{0} ", n)
Next
' You can also use ToArray, ToList, etc
' as with LINQ to Objects.
Dim parallelQuery2 = (From num In source.AsParallel()
Where num Mod 10 = 0
Select num).ToArray()
'Method syntax is also supported
Dim parallelQuery3 = source.AsParallel().Where(Function(n)
Return (n Mod 10) = 0
End Function).Select(Function(n)
Return n
End Function)
For Each i As Integer In parallelQuery3
Console.Write("{0} ", i)
Next
Console.ReadLine()
End Sub
' A toy function to demonstrate syntax. Typically you need a more
' computationally expensive method to see speedup over sequential queries.
Sub DoSomething(ByVal i As Integer)
Console.Write("{0:###.## }", Math.Sqrt(i))
End Sub
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 Cómo: Controlar la ordenación en una consulta PLINQ.
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.
Vea también
Conceptos
Historial de cambios
Fecha |
Historial |
Motivo |
---|---|---|
Mayo de 2010 |
Se ha agregado una nota sobre el uso frente a aceleración. |
Comentarios de los clientes. |