Heim >Backend-Entwicklung >C#.Net-Tutorial >Eine beispielhafte Einführung in die Parallel-Klasse paralleler C#-Aufgaben
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
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
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
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 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 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! 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: Parallel.Invoke(() =>{
Thread.Sleep(100);
Console.WriteLine("method1");
}, () =>{
Thread.Sleep(10);
Console.WriteLine("method2");
});
Das Ausgabeergebnis ist wie folgt folgt: