Heim  >  Artikel  >  Backend-Entwicklung  >  Eine beispielhafte Einführung in die Parallel-Klasse paralleler C#-Aufgaben

Eine beispielhafte Einführung in die Parallel-Klasse paralleler C#-Aufgaben

零下一度
零下一度Original
2017-06-23 15:13:392248Durchsuche

1. Parallel-Klasse

Die Parallel-Klasse stellt Daten- und Aufgabenparallelität bereit.

2. Die Paralleler.For()-Methode ist ähnlich Die for-Schleifenanweisung in C# führt eine Aufgabe auch mehrmals aus. Iterationen können mit der Methode Paraller.For() parallel ausgeführt werden. Die Reihenfolge der Iterationen ist nicht definiert.

In der For()-Methode sind die ersten beiden Parameter festgelegt. Diese beiden Parameter definieren den Anfang und das Ende der Schleife. Beschreiben Sie zunächst die erste Methode For(int,int,Action). Der dritte Parameter ist die Anzahl der Iterationen der Schleife Parameter wird übergeben. Die dem Delegaten übergebene Methode. Der Rückgabetyp der Methode Paraller.For() ist eine ParallelLoopResult-Struktur, die Informationen darüber bereitstellt, ob die Schleife beendet wurde, und den Index der niedrigsten Iteration (gibt eine Ganzzahl zurück, die die niedrigste Iteration darstellt, von der aus die Break-Anweisung aufgerufen wurde). Schreiben Sie zunächst ein Beispiel:

            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);
Das Ausgabeergebnis lautet wie folgt:

Wie Sie sehen können, ist die Delegate-Methode 10 Mal ausgeführt wurde, ist die Reihenfolge ebenfalls nicht garantiert. Für die niedrigste Iteration werden jedoch keine Daten ausgegeben. Dies liegt daran, dass die Ganzzahl der niedrigsten Iteration zurückgegeben wird, die die Break-Anweisung aufruft. Wenn Sie die For()-Methode während der Ausführung frühzeitig unterbrechen müssen, können Sie ParallelLoopState verwenden, um sie zu implementieren, For(int,int,Action). Ändern Sie das obige Beispiel:

            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);
Das Ausgabeergebnis lautet wie folgt:

3 Parallel.ForEach()

Die Methode „Paraller.ForEach()“ durchläuft die Sammlung, die IEnumerable implementiert. Ihre Methode ähnelt der foreach-Anweisung, sie durchläuft jedoch asynchron, und die Durchlaufreihenfolge wird hier nicht bestimmt. Beschreiben Sie zunächst die erste Methode, Paraller.ForEach(IEnumerable,Action), und schauen Sie sich zunächst das folgende Beispiel an:

            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);
Ausgabeergebnisse Wie folgt :

Es kann auch die Iterationsnummer und ParallelLoopState wie For übergeben, die Methode ist 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);
und das Ausgabeergebnis lautet wie folgt:

4. Parallel.Invoke()

Parallel.Invoke()-Methode, die den Task-Parallelitätsmodus bereitstellt. Die Methode „Paraller.Invoke()“ ermöglicht die Übergabe eines Aktionsdelegaten-Arrays, in dem Sie die Methode angeben können, die ausgeführt werden soll. Siehe das Beispiel unten

            Parallel.Invoke(() =>{
                Thread.Sleep(100);
                Console.WriteLine("method1");
            }, () =>{
                Thread.Sleep(10);
                Console.WriteLine("method2");
            });
Das Ausgabeergebnis ist wie folgt folgt:

5. Fazit

Die Methoden Parallel.For() und Paraller.ForEach() rufen in jeder Iteration denselben Code auf, während die Methoden Parallel Die Methode .Invoke() ermöglicht den gleichzeitigen Aufruf verschiedener Methoden. Parallel.ForEach() wird für die Datenparallelität verwendet, Parallel.Invoke() wird für die Aufgabenparallelität verwendet;

Das obige ist der detaillierte Inhalt vonEine beispielhafte Einführung in die Parallel-Klasse paralleler C#-Aufgaben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn