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.