Procedura: combinare query LINQ parallele e sequenziali
Questo esempio mostra come usare il metodo AsSequential per indicare a PLINQ di elaborare tutti gli operatori successivi nella query in modo sequenziale. Anche se l'elaborazione sequenziale è spesso più lenta di quella parallela, a volte è necessaria per produrre risultati corretti.
Nota
Lo scopo di questo esempio consiste nell'illustrare l'uso ed è possibile che l'esecuzione non sia più veloce rispetto alla query LINQ to Objects sequenziale equivalente. Per altre informazioni sull'aumento di velocità, vedere Informazioni sull'aumento di velocità in PLINQ.
Esempio
L'esempio seguente mostra uno scenario in cui è necessario usare AsSequential, in particolare per mantenere l'ordinamento stabilito in una clausola precedente della query.
// 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
Compilazione del codice
Per compilare ed eseguire il codice, incollarlo nel progetto PLINQ Data Sample, aggiungere una riga per chiamare il metodo da Main
e quindi premere F5.