详细介绍.NET并行与多线程学习基础


本文摘自PHP中文网,作者迷茫,侵删。

一、并行初试:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

public static void test()

        {

            for (int i = 0; i < 10000; i++)

            {

                Console.WriteLine(i);

            }

        }

 

        public static void test1()

        {

            for (int i = 0; i < 10000; i++)

            {

                Console.WriteLine(i + "aaaaaaaaaaaaaaa");

            }

        }

调用:

1

2

3

4

5

6

7

8

9

10

11

12

13

static void Main(string[] args)

        {

            Stopwatch sw = new Stopwatch();

            sw.Start();

//串行执行:

test();

test1();

//并行执行:

17Parallel.Invoke(test, test1);

19sw.Stop();

21Console.WriteLine("共耗费时间:");

23Console.WriteLine(sw.ElapsedMilliseconds / 1000+"s");

}

二、分区并行:

1

2

3

4

5

6

7

8

9

10

11

12

13

Parallel.ForEach(Partitioner.Create(1,20,5),(x,s)=>{

                //并行代码中自定义串行,第三个参数表示item1到item2之间的范围

                Console.WriteLine(x);

                for (int i = x.Item1; i < x.Item2; i++)

                {

                    if (i == 10) break;

 

                    Console.WriteLine(i);

                }

                s.Break();// 非常类似普通for循环中的break

                if (s.ShouldExitCurrentIteration)

                    return;

            });

三、异常捕获:AggregateException

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

int[] arry = new int[10001];

 

            for (int i = 0; i < 10000; i++)

            {

                arry[i] = i;

            }

            try

            {

 

                Parallel.ForEach(arry, (x, s) =>

                {

                    Console.WriteLine(x);

                    if (sw.Elapsed.Seconds > 3)

                    {

                        throw new TimeoutException("操作超时");

                    }

                });

            }

            catch (AggregateException ex)

            {

                foreach (var item in ex.InnerExceptions)

                {

                    Console.WriteLine(item);

                }

            }

四、指定并行调度:

1

2

3

4

5

6

7

ParallelOptions options = new ParallelOptions();

            options.MaxDegreeOfParallelism = 1;//如果设置为1就类似于串行代码按顺序执行

            options.MaxDegreeOfParallelism =Environment.ProcessorCount;//获取计算机上面的处理器数量

            Parallel.For(1,10,options,(x) =>

            {

                Console.WriteLine(x);

            });

以上就是详细介绍.NET并行与多线程学习基础的详细内容!

相关阅读 >>

c#中关于infinity与nan的简单介绍

.net mvc 连接数据本地数据库三种方法总结

c#中自定义控件如何实现textbox禁止粘贴的示例代码

.net是什么

为 jenkins 配置 .net 持续集成环境

c#中匿名委托以及lambda表达式的实例详解

.net中xml转换成treeview视图

.net 打开文件

c#如何实现json与对象之间互相转换功能示例

c#实现表格隔行换色

更多相关阅读请进入《.net》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...