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.

Siehe auch