Procédure : combiner des requêtes LINQ parallèles et séquentielles

Cet exemple montre comment utiliser la méthode AsSequential pour indiquer à PLINQ de traiter de manière séquentielle tous les opérateurs suivants dans la requête. Bien que le traitement séquentiel soit généralement plus lent que le traitement en parallèle, il est parfois nécessaire pour produire des résultats corrects.

Notes

Cet exemple, destiné à illustrer l'utilisation, peut ne pas s'exécuter plus rapidement que la requête séquentielle équivalente de LINQ to Objects. Pour plus d’informations sur l’accélération, consultez Fonctionnement de l’accélération dans PLINQ.

Exemple

L’exemple suivant montre un scénario dans lequel AsSequential est obligatoire, pour conserver le classement qui a été établi dans une clause précédente de la requête.

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

Compilation du code

Pour compiler et exécuter ce code, collez-le dans le projet PLINQ Data Sample, ajoutez une ligne pour appeler la méthode à partir de Main et appuyez sur F5.

Voir aussi