Como combinar consultas LINQ paralelas e sequenciais

Este exemplo mostra como usar o AsSequential método para instruir PLINQ a processar todos os operadores subsequentes na consulta sequencialmente. Embora o processamento sequencial seja muitas vezes mais lento do que o paralelo, às vezes é necessário produzir resultados corretos.

Nota

Este exemplo destina-se a demonstrar o uso e pode não ser executado mais rápido do que a consulta LINQ to Objects sequencial equivalente. Para obter mais informações sobre speedup, consulte Understanding Speedup in PLINQ.

Exemplo

O exemplo a seguir mostra um cenário no qual AsSequential é necessário, ou seja, preservar a ordem que foi estabelecida em uma cláusula anterior da consulta.

// Paste into PLINQDataSample class.
static void SequentialDemo()
{
    var orders = GetOrders();
    var query = (from order in orders.AsParallel()
                 orderby order.OrderID
                 select new
                 {
                     order.OrderID,
                     OrderedOn = order.OrderDate,
                     ShippedOn = order.ShippedDate
                 })
                 .AsSequential().Take(5);
}
' Paste into PLINQDataSample class
Shared Sub SequentialDemo()

    Dim orders = GetOrders()
    Dim query = From ord In orders.AsParallel()
                Order By ord.OrderID
                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

Compilando o código

Para compilar e executar esse código, cole-o no projeto PLINQ Data Sample , adicione uma linha para chamar o método de Maine pressione F5.

Consulte também