Cómo: Combinar consultas LINQ paralelas y secuenciales
En este ejemplo, se muestra cómo usar el método AsSequential<TSource> para indicar a PLINQ que procese secuencialmente todos los operadores posteriores de la consulta. Aunque el procesamiento secuencial es por lo general más lento que el procesamiento en paralelo, a veces es necesario para generar resultados correctos.
Precaución |
---|
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. |
Ejemplo
En el siguiente ejemplo se muestra un escenario en el que se requiere AsSequential<TSource>, a saber, para conservar el orden que se estableció en una cláusula anterior de la consulta.
' Paste into PLINQDataSample class
Shared Sub SequentialDemo()
Dim orders = GetOrders()
Dim query = From ord In orders.AsParallel()
Order By ord.CustomerID
Select New With
{
ord.OrderID,
ord.OrderDate,
ord.ShippedDate
}
Dim query2 = query.AsSequential().Take(5)
For Each item In query2
Console.WriteLine("{0}, {1}, {2}", item.OrderDate, item.OrderID, item.ShippedDate)
Next
End Sub
// Paste into PLINQDataSample class.
static void SequentialDemo()
{
var orders = GetOrders();
var query = (from ord in orders.AsParallel()
orderby ord.CustomerID
select new
{
Details = ord.OrderID,
Date = ord.OrderDate,
Shipped = ord.ShippedDate
}).
AsSequential().Take(5);
}
Compilar el código
Para compilar y ejecutar este código, péguelo en el proyecto Ejemplo de datos de PLINQ, agregue una línea para llamar al método desde Main y, a continuación, 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. |