C#基础

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用来并行调用不同的任务。

原文地址:https://www.cnblogs.com/zfylzl/p/9970862.html