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 Main
pliku i naciśnij klawisz F5.