1,parallel class
The parallel class is a good abstraction for threads. This class is located in the System.Threading.Tasks namespace and provides parallelism for data and tasks.
The parallel class defines the parallel for and foreach static methods. For C # for and foreach statements, loops run from one thread. The parallel class uses multiple tasks, so multiple threads are used to complete the job.
The Parallel.For () and Parallel.ForEach () methods Call the same code in each iteration , whereas the Parallel.Invoke () method allows different methods to be called simultaneously . Parallel.Invoke is used for task parallelism, while Parallel.ForEach is used for data parallelism.
2,parallel.invoke Method
The simplest way to try to run multiple methods in parallel is to use the parallel class's Invoke method to see the sample code:
Private Static void Main (string[] args) { Parallel.Invoke (()=>console.writeline (" eat "), () =>console.writeline (" sleeping "), () =>console.writeline (" hit the peas "); Console.readkey (); }
Execution Result:
The Invoke method receives an array of action
Public Static void Invoke (params action[] actions);
As you can see from the execution results, there is no specific order of execution.
The Parallel.Invoke method returns only after all the methods have been completed, does not guarantee that the method can start execution at the same time, and if one or more cores are busy, the underlying scheduling logic may delay execution of some methods.
3,parallel.for
The Parallel.For () method is similar to the FOR Loop statement for C #, and it is a task that executes multiple times. Using the Parallel.For () method, you can run iterations in parallel.
In the For () method, the first two parameters define the start and end of the loop. The third parameter is a action<int> delegate. An integer parameter is the number of iterations of a loop that is passed to the method that the delegate refers to. The return type of the Parallel.For () method is the Parallelloopresult structure, which provides information about whether the loop ends.
Private Static voidMain (string[] args) {Parallelloopresult result= Parallel.For (0,Ten, i ={Console.WriteLine ($"{I},task:{task.currentid},thread:{thread.currentthread.managedthreadid}"); Thread.Sleep (Ten); }); Console.WriteLine ($"Is completed: {result. IsCompleted}"); Console.readkey (); }
Execution Result:
4,parallel.foreach
The Parallel.ForEach () method traversal implements the collection of IEnumerable, which is similar to a ForEach statement but traverses asynchronously. There is also no definite traversal order here.
string[] data = {"Zero"," One"," Both","three"," Four","Five","Six","Seven","Eight","Nine","Ten"}; Parallelloopresult result= parallel.foreach<string> (data, S ={Console.WriteLine (s); Thread.Sleep (Ten); });
Execution Result:
Zerofivetenonesixthreetwosevenfoureightnine
This article speaks very well: "Reading Notes". NET Parallel Programming Advanced Tutorial--parallel
C # Advanced Programming reading Notes (15): task, thread, and synchronization one of the parallel classes