Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

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

.NET Framework (current version)
 

Date de publication : novembre 2016

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

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.

Paramètres de type

TLocal

Type des données locales de thread.

Exception Condition
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

Le CancellationToken dans les parallelOptions argument est annulé.

ObjectDisposedException

Le CancellationTokenSource associé à la CancellationToken dans le parallelOptions a été supprimé.

AggregateException

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

Le 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), un ParallelLoopState instance qui peut être utilisée pour sortir prématurément de la boucle et un état local qui peut être partagé parmi les itérations qui s’exécutent sur la même tâche.

Le localInit est appelé une fois pour chaque tâche qui participe à l’exécution de la boucle et retourne l’état local initial pour chacun de ces tâches. Ces états initiaux sont passés à la première body appels sur chaque tâche. Ensuite, chaque appel de corps suivant retourne 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 qui est passée à la localFinally déléguer. Le localFinally est appelé une fois par la tâche à 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.

Le Parallel.For méthode peut utiliser plus de tâches que les threads de la durée de vie de son exécution, en tant que tâches existantes terminées et sont remplacés par les nouvelles tâches. Cela donne sous-jacent TaskScheduler objet occasion d’ajouter, modifier ou supprimer des threads que le service de la boucle.

Si fromInclusive est supérieure ou égale à toExclusive, la méthode retourne immédiatement sans exécuter d’itérations.

L’exemple suivant utilise des variables locales de thread pour calculer la somme des résultats de nombreuses opérations de longue durée. 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;
   }
}

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 4.0
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher: