Comment : combiner des requêtes LINQ parallèles et séquentielles
Cet exemple indique comment utiliser la méthode AsSequential<TSource> pour indiquer à PLINQ de traiter séquentiellement tous les opérateurs suivants dans la requête. Bien que le traitement séquentiel soit généralement plus lent que le traitement parallèle, il est quelquefois nécessaire pour produire des résultats corrects.
Attention |
---|
Cet exemple est destiné à montrer l'utilisation et peut ne pas s'exécuter plus rapidement que la requête LINQ to Objects séquentielle équivalente.Pour plus d'informations sur l'accélération, consultez Fonctionnement de l'accélération dans PLINQ. |
Exemple
L'exemple suivant affiche un scénario dans lequel AsSequential<TSource> est obligatoire, pour conserver le classement établi dans une clause précédente de la requête.
' 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);
}
Compilation du code
Pour compiler et exécuter ce code, collez-le dans le projet Données PLINQ, exemple, ajoutez une ligne pour appeler la méthode à partir de Main, puis appuyez sur F5.
Voir aussi
Concepts
Historique des modifications
Date |
Historique |
Motif |
---|---|---|
Mai 2010 |
Remarque ajoutée concernant l'utilisation et l'accélération. |
Commentaires client. |