Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

Parallel.For<TLocal>, méthode (Int32, Int32, ParallelOptions, Func<TLocal>, Func<Int32, ParallelLoopState, TLocal, TLocal>, Action<TLocal>)

Exécute une boucle for (For en Visual Basic) avec des données locales de thread dans laquelle les itérations peuvent s'exécuter en parallèle, les options de la boucle peuvent être configurées et l'état de la boucle peut être surveillé et manipulé.

Espace de noms :  System.Threading.Tasks
Assembly :  mscorlib (dans mscorlib.dll)

public static ParallelLoopResult For<TLocal>(
	int fromInclusive,
	int toExclusive,
	ParallelOptions parallelOptions,
	Func<TLocal> localInit,
	Func<int, ParallelLoopState, TLocal, TLocal> body,
	Action<TLocal> localFinally
)

Paramètres de type

TLocal

Type des données locales de thread.

Paramètres

fromInclusive
Type : System.Int32
Index de début, inclus.
toExclusive
Type : System.Int32
Index de fin, exclusif.
parallelOptions
Type : System.Threading.Tasks.ParallelOptions
Objet qui configure le comportement de cette opération.
localInit
Type : System.Func<TLocal>
Délégué de fonction qui retourne l'état initial des données locales pour chaque tâche.
body
Type : System.Func<Int32, ParallelLoopState, TLocal, TLocal>
Délégué appelé une fois par itération.
localFinally
Type : System.Action<TLocal>
Délégué qui exécute une dernière action sur l'état local de chaque tâche.

Valeur de retour

Type : System.Threading.Tasks.ParallelLoopResult
Structure qui contient des informations sur la partie de la boucle terminée.

ExceptionCondition
ArgumentNullException

L'argument body a la valeur null.

ou

L'argument localInit a la valeur null.

ou

L'argument localFinally a la valeur null.

ou

L'argument parallelOptions a la valeur null.

OperationCanceledException

CancellationToken dans l'argument parallelOptions est annulé.

ObjectDisposedException

Objet CancellationTokenSource associé à CancellationToken dans l'objet parallelOptions a été supprimé.

AggregateException

Exception qui contient toutes les exceptions individuelles levées sur tous les threads.

Le délégué body est appelé une fois pour chaque valeur dans la plage d'itérations (fromInclusive, toExclusive). Il est fourni avec les paramètres suivants: le nombre d'itérations (Int32), une instance ParallelLoopState qui peut être utilisée pour sortir prématurément de la boucle et un état local qui peut être partagé par des itérations s'exécutant sur le même tâche.

Le délégué localInit est appelé une fois pour chaque tâche qui participe à l'exécution de la boucle et retourne l'état local initial pour chacune de ces tâches. Ces états initiaux sont passés aux premiers appels body sur chaque tâche. Chaque appel de corps suivant retourne ensuite une valeur d'état éventuellement modifiée qui est passée à l'appel de corps suivant. Enfin, le dernier appel du corps sur chaque tâche retourne une valeur d'état passée au délégué localFinally. Le délégué localFinally est appelé une fois par tâche pour exécuter une dernière action sur l'état local de chaque tâche. Ce délégué peut être appelé simultanément sur plusieurs threads ; par conséquent, vous devez synchroniser l'accès à toutes les variables partagées.

La méthode Parallel.For peut utiliser plus de tâches que de threads pendant la durée de vie de son exécution, étant donné que les tâches existantes s'achèvent et sont remplacées par de nouvelles tâches. Cela donne à l'objet TaskScheduler sous-jacent l'occasion d'ajouter, modifier, ou supprimer les threads qui servent à la boucle.

Si fromInclusive est supérieur ou égal à toExclusive, la méthode est retournée immédiatement sans exécuter d'itérations.

L'exemple suivant utilise des variables thread locales pour calculer la somme des résultats de nombreuses opérations longues. Cet exemple limite le degré de parallélisme à quatre.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

class ThreadLocalForWithOptions
{
   // The number of parallel iterations to perform.
   const int N = 1000000;

   static void Main()
   {
      // The result of all thread-local computations.
      int result = 0;

      // This example limits the degree of parallelism to four.
      // You might limit the degree of parallelism when your algorithm
      // does not scale beyond a certain number of cores or when you 
      // enforce a particular quality of service in your application.

      Parallel.For(0, N, new ParallelOptions { MaxDegreeOfParallelism = 4 },
         // Initialize the local states
         () => 0,
         // Accumulate the thread-local computations in the loop body
         (i, loop, localState) =>
         {
            return localState + Compute(i);
         },
         // Combine all local states
         localState => Interlocked.Add(ref result, localState)
      );

      // Print the actual and expected results.
      Console.WriteLine("Actual result: {0}. Expected 1000000.", result);
   }

   // Simulates a lengthy operation.
   private static int Compute(int n)
   {
      for (int i = 0; i < 10000; i++) ;
      return 1;
   }
}


.NET Framework

Pris en charge dans : 4.5.2, 4.5.1, 4.5, 4

.NET Framework Client Profile

Pris en charge dans : 4

Bibliothèque de classes portable

Pris en charge dans : Bibliothèque de classes portable

.NET pour les applications du Windows Store

Pris en charge dans : Windows 8

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (rôle principal du serveur non pris en charge), Windows Server 2008 R2 (rôle principal du serveur pris en charge avec SP1 ou version ultérieure ; Itanium non pris en charge)

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft