Parallel主要是并行编程,可以并行执行一段代码,要使用Paralle,需要先引入命名空间System.Threading.Tasks。
1.Parallel.For
Parallel.For()方法有点跟C#的for循环类似,只不过可以并行迭代,但是执行的顺序是没有保证的。
public void TestParallel() { int sum = 0; Parallel.For(0, 10, (i) => { sum += i; }); }
Parallel.For()有三个参数,第一个是执行开始的数,第二个是结束的数,第三个是一个委托。
其中第三个委托可以接收两个参数,一个是当前执行的对象或参数,另外一个是ParallelLoopResult的对象。
public void TestParallel() { int sum = 0; Parallel.For(0, 10, (i, loopState) => { sum += i; var lop = loopState.LowestBreakIteration; }); }
Parallel.For()方法其实返回的是ParallelLoopResult对象,根据这个对象可以判断当前并行执行的线程是否已经结束,以及当前的最低迭代索引。
public void TestParallel() { int sum = 0; ParallelLoopResult result = Parallel.For(0, 10, (i, loopState) => { sum += i; }); var isComplate = result.IsCompleted; var lop = result.LowestBreakIteration; }
2.Parallel.Foreach
Parallel.Foreach()方法跟C#的foreach方法类似,都是可以遍历一个集合。Parallel.Foreach()跟Parallel.For()一样,也是无法保证执行顺序的。看看如下代码:
public void TestParallel() { var list = new List<string>(); Parallel.ForEach(list, new ParallelOptions { MaxDegreeOfParallelism = 3 }, (name) => { }); }
Parallel.Foreach可以接收三个参数,第一个是要遍历的集合,第二个是一个ParallelOptions的对象,有个属性MaxDegreeOfParallelism可以设置每次并行执行的个数,第三个参数是一个委托,接收一个参数,遍历的集合的元素。
3.Parallel.Invoke
Parallel.Invoke可以进行任务并行,接收多个委托参数,每个委托都可以不一样,并行执行,也就是可以接收多个不同的方法,同时执行。看看如下代码:
public void TestParallel() { Parallel.Invoke(TestGross, TestStopwatch, TestAssembly); Parallel.Invoke(() => { }, () => { }, () => { }); }
Parallel.For和Parallel.Foreach用来并行执行集合,Parallel.Invoke用来并行调用不同的任务。