Como: combinar consultas LINQ paralelas e sequenciais

Este exemplo mostra como usar o método AsSequential para instruir o PLINQ para processar todos os operadores subsequentes na consulta em sequência. Embora o processamento sequencial seja frequentemente mais lento do que o paralelo, às vezes, ele é necessário para gerar resultados corretos.

Observação

Este exemplo tem como objetivo demonstrar o uso e pode não executar tão rápido quanto a consulta LINQ to Objects sequencial equivalente. Para saber mais sobre agilização, confira Noções básicas sobre agilização no PLINQ.

Exemplo

O exemplo a seguir mostra um cenário em que AsSequential é necessário, ou seja, para 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 Exemplo de Dados PLINQ, adicione uma linha para chamar o método de Main e pressione F5.

Confira também