Практическое руководство. Объединение параллельных и последовательных запросов LINQ
В этом примере показано, как использовать метод AsSequential<TSource> для указания PLINQ последовательно обработать все последующие операторы в запросе. Хотя обычно последовательная обработка медленнее, чем параллельная, иногда она требуется для получения правильных результатов.
Внимание |
---|
Этот пример демонстрирует использование и может выполняться медленнее, чем аналогичный последовательный запрос LINQ to Objects.Дополнительные сведения об увеличении скорости см. в разделе Общее представление об ускорении выполнения в PLINQ. |
Пример
В следующем примере показан один сценарий, в котором AsSequential<TSource> необходим, а именно для сохранения порядка, установленного в предыдущем предложении запроса.
' Paste into PLINQDataSample class
Shared Sub SequentialDemo()
Dim orders = GetOrders()
Dim query = From ord In orders.AsParallel()
Order By ord.CustomerID
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
// Paste into PLINQDataSample class.
static void SequentialDemo()
{
var orders = GetOrders();
var query = (from ord in orders.AsParallel()
orderby ord.CustomerID
select new
{
Details = ord.OrderID,
Date = ord.OrderDate,
Shipped = ord.ShippedDate
}).
AsSequential().Take(5);
}
Компиляция кода
Чтобы скомпилировать и запустить этот код, нужно вставить его в проект Пример данных PLINQ, добавить строку для вызова метода из Main и нажать F5.
См. также
Основные понятия
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Май 2010 |
Добавлено примечание о сравнении использования и ускорения. |
Обратная связь от клиента. |