Home > Article > Backend Development > An example introduction to the Parallel class of C# parallel tasks
1. Parallel class
The Parallel class provides data and task parallelism;
2. Paraller.For()
The Paraller.For() method is similar The for loop statement in C# also executes a task multiple times. Iterations can be run in parallel using the Paraller.For() method. The order of the iterations is not defined.
In the For() method, the first two parameters are fixed. These two parameters define the beginning and end of the loop. First describe its first method 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);
The output result is as follows:
You can see that the delegate method has been run 10 times, in order It is also not guaranteed. But no data comes out for the lowest iteration. This is because it returns the integer of the lowest iteration that calls the Break statement. We do not have a break here. If you need to interrupt the For() method early during execution, you can use ParallelLoopState to implement it, 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);
The output result is as follows:
3. Parallel.ForEach()
The Paraller.ForEach() method traverses the collection that implements IEnumerable. Its method is similar to the foreach statement, but it traverses in an asynchronous manner, and the traversal order is not determined here. First describe its first method, 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);
The output results are as follows:
##It can also pass in the iteration number and ParallelLoopState like For, the method is ForEachstring[] 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);in the above example and the output result is as follows: 4. Parallel.Invoke() Parallel.Invoke() method, which provides task parallelism mode. The Paraller.Invoke() method allows passing an Action delegate array, in which you can specify the method that should be run. See the following example
Parallel.Invoke(() =>{ Thread.Sleep(100); Console.WriteLine("method1"); }, () =>{ Thread.Sleep(10); Console.WriteLine("method2"); });The output result is as follows: 5. Conclusion The Parallel.For() and Paraller.ForEach() methods call the same code in each iteration, while the Parallel.Invoke() method allows different calls to be made at the same time. Methods. Parallel.ForEach() is used for data parallelism, and Parallel.Invoke() is used for task parallelism;
The above is the detailed content of An example introduction to the Parallel class of C# parallel tasks. For more information, please follow other related articles on the PHP Chinese website!