Maison  >  Article  >  développement back-end  >  Un exemple d'introduction à la classe Parallel de tâches parallèles C#

Un exemple d'introduction à la classe Parallel de tâches parallèles C#

零下一度
零下一度original
2017-06-23 15:13:392248parcourir

1. Classe Parallel

La classe Parallel fournit le parallélisme des données et des tâches

2.Paraller.For()

La méthode Paraller.For() est similaire ; L'instruction de boucle for en C# exécute également une tâche plusieurs fois. Les itérations peuvent être exécutées en parallèle à l'aide de la méthode Paraller.For(). L'ordre des itérations n'est pas défini.

Dans la méthode For(), les deux premiers paramètres sont fixes. Ces deux paramètres définissent le début et la fin de la boucle. Décrivez d'abord sa première méthode For(int,int,Action). Les deux premiers paramètres représentent le début et l'introduction de la boucle. Le troisième paramètre est un délégué. Le paramètre entier est le nombre d'itérations de la boucle. le paramètre est passé La méthode donnée au délégué. Le type de retour de la méthode Paraller.For() est une structure ParallelLoopResult, qui fournit des informations indiquant si la boucle est terminée et l'index de l'itération la plus basse (renvoie un entier représentant l'itération la plus basse à partir de laquelle l'instruction Break a été appelée). Écrivez d'abord un exemple :

            ParallelLoopResult result = Parallel.For(0, 10, i =>{
                Console.WriteLine("迭代次数:{0},任务ID:{1},线程ID:{2}", i, Task.CurrentId, Thread.CurrentThread.ManagedThreadId);
                Thread.Sleep(10);
            });

            Console.WriteLine("是否完成:{0}", result.IsCompleted);
            Console.WriteLine("最低迭代:{0}", result.LowestBreakIteration);

Le résultat de sortie est le suivant :

Comme vous pouvez le voir, la méthode déléguée a été exécuté 10 fois, la commande n'est pas non plus garantie. Mais aucune donnée n'est sortie pour l'itération la plus basse, car elle renvoie l'entier de l'itération la plus basse qui appelle l'instruction Break. Nous n'avons pas de pause ici. Si vous devez interrompre la méthode For() au début de l'exécution, vous pouvez utiliser ParallelLoopState pour l'implémenter, For(int,int,Action). Modifiez l'exemple ci-dessus :

            ParallelLoopResult result = Parallel.For(0, 10, (i, state) =>{
                Console.WriteLine("迭代次数:{0},任务ID:{1},线程ID:{2}", i, Task.CurrentId, Thread.CurrentThread.ManagedThreadId);
                Thread.Sleep(10);if (i > 5)
                    state.Break();
            });

            Console.WriteLine("是否完成:{0}", result.IsCompleted);
            Console.WriteLine("最低迭代:{0}", result.LowestBreakIteration);

Le résultat de sortie est le suivant :

3. 🎜 >

La méthode Paraller.ForEach() parcourt la collection qui implémente IEnumerable. Sa méthode est similaire à l'instruction foreach, mais elle parcourt de manière asynchrone et l'ordre de parcours n'est pas déterminé ici. Décrivez d'abord sa première méthode, Paraller.ForEach(IEnumerable,Action), regardez d'abord l'exemple suivant

            string[] data = { "str1", "str2", "str3" };
            ParallelLoopResult result = Parallel.ForEach<string>(data, str =>  {
                  Console.WriteLine(str);
              });
            Console.WriteLine("是否完成:{0}", result.IsCompleted);
            Console.WriteLine("最低迭代:{0}", result.LowestBreakIteration);
Résultats de sortie comme suit : :

Il peut également transmettre le numéro d'itération et ParallelLoopState comme For, la méthode est ForEach(IEnumerable source, Action

            string[] data = { "str1", "str2", "str3", "str4", "str5" };
            ParallelLoopResult result = Parallel.ForEach<string>(data, (str, state, i) =>  {
                  Console.WriteLine("迭代次数:{0},{1}", i, str);                  if (i > 3)
                      state.Break();
              });
            Console.WriteLine("是否完成:{0}", result.IsCompleted);
            Console.WriteLine("最低迭代:{0}", result.LowestBreakIteration);
et le résultat de sortie est le suivant :

4. Parallel.Invoke ()

Méthode Parallel.Invoke(), qui fournit le mode de parallélisme des tâches. La méthode Paraller.Invoke() permet de transmettre un tableau de délégués Action, dans lequel vous pouvez spécifier la méthode qui doit être exécutée. Voir l'exemple ci-dessous

            Parallel.Invoke(() =>{
                Thread.Sleep(100);
                Console.WriteLine("method1");
            }, () =>{
                Thread.Sleep(10);
                Console.WriteLine("method2");
            });
Le résultat de sortie est le suivant. suit :

5. Conclusion

Les méthodes Parallel.For() et Paraller.ForEach() appellent le même code à chaque itération, tandis que Parallel. La méthode .Invoke() permet d’appeler simultanément différentes méthodes. Parallel.ForEach() est utilisé pour le parallélisme des données, Parallel.Invoke() est utilisé pour le parallélisme des tâches ;

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn