Procédure : combiner des requêtes LINQ parallèles et séquentiellesHow to: Combine Parallel and Sequential LINQ Queries

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.This example shows how to use the AsSequential method to instruct PLINQ to process all subsequent operators in the query sequentially. Bien que le traitement séquentiel soit souvent plus lent que parallèle, il est parfois nécessaire de produire des résultats corrects.Although sequential processing is often slower than parallel, sometimes it's necessary to produce correct results.

Notes

Cet exemple est destiné à illustrer l’utilisation et peut ne pas s’exécuter plus rapidement que la requête LINQ to Objects séquentielle équivalente.This example is intended to demonstrate usage and might not run faster than the equivalent sequential LINQ to Objects query. Pour plus d’informations sur l’accélération, consultez Fonctionnement de l’accélération dans PLINQ.For more information about speedup, see Understanding Speedup in PLINQ.

ExempleExample

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.The following example shows one scenario in which AsSequential is required, namely to preserve the ordering that was established in a previous clause of the query.

// 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);
}
' 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

Compilation du codeCompiling the Code

Pour compiler et exécuter ce code, collez-le dans le projet d' exemple de données PLINQ , ajoutez une ligne pour appeler la méthode à partir de Main et appuyez sur F5.To compile and run this code, paste it into the PLINQ Data Sample project, add a line to call the method from Main, and press F5.

Voir aussiSee also