Porady: łączenie równoległych i sekwencyjnych zapytań LINQ

W tym przykładzie AsSequential pokazano, jak używać metody w celu poinstruowania PLINQ, aby przetwarzać wszystkie kolejne operatory w zapytaniu sekwencyjnie. Chociaż przetwarzanie sekwencyjne jest często wolniejsze niż równoległe, czasami konieczne jest wygenerowanie poprawnych wyników.

Uwaga

Ten przykład ma na celu zademonstrowanie użycia i może nie działać szybciej niż równoważne sekwencyjne zapytanie LINQ to Objects. Aby uzyskać więcej informacji na temat przyspieszania, zobacz Understanding Speedup in PLINQ (Opis szybkości w PLINQ).

Przykład

W poniższym przykładzie pokazano jeden scenariusz, w którym AsSequential jest wymagany, a mianowicie zachowanie kolejności ustanowionej w poprzedniej klauzuli zapytania.

// 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

Kompilowanie kodu

Aby skompilować i uruchomić ten kod, wklej go w projekcie PRZYKŁAD danych PLINQ, dodaj wiersz, aby wywołać metodę z Mainpliku i naciśnij klawisz F5.

Zobacz też