Home  >  Article  >  Backend Development  >  An example introduction to the Parallel class of C# parallel tasks

An example introduction to the Parallel class of C# parallel tasks

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

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). The first two parameters represent the beginning and introduction of the loop. The third parameter is a delegate. The integer parameter is the number of iterations of the loop. This parameter is passed The method given to the delegate. The return type of the Paraller.For() method is a ParallelLoopResult structure, which provides information about whether the loop has ended and the index of the lowest iteration (returns an integer representing the lowest iteration from which the Break statement was called). First write an example:

            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). Change the above example:

            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(IEnumerable,Action), first look at the following example;

            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 ForEach(IEnumerable source, Action body), then change

            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);
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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn