Vorgehensweise: Kombinieren von parallelen und sequenziellen LINQ-Abfragen
Dieses Beispiel zeigt die Verwendung der AsSequential-Methode, um PLINQ anzuweisen, alle nachfolgenden Operatoren in der Abfrage sequenziell zu verarbeiten. Sequenzielle Verarbeitung ist zwar häufig langsamer als parallele Verarbeitung, doch manchmal ist sie erforderlich, um richtige Ergebnisse zu erzielen.
Hinweis
Dieses Beispiel soll die Nutzung darstellen und wird möglicherweise nicht schneller ausgeführt als die entsprechende sequenzielle LINQ to Objects-Abfrage. Weitere Informationen finden Sie unter Grundlagen zur Beschleunigung in PLINQ.
Beispiel
Das folgende Beispiel zeigt ein Szenario, in dem AsSequential erforderlich ist, um die Reihenfolge in einer vorherigen Klausel der Abfrage beizubehalten.
// 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
Kompilieren des Codes
Um diesen Code zu kompilieren und auszuführen, fügen Sie ihn in das PLINQ-Datenbeispiel-Projekt ein, fügen Sie eine Zeile für den Methodenaufruf aus Main
hinzu, und drücken Sie F5.