博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#~异步编程再续~async异步方法与同步方法的并行
阅读量:7061 次
发布时间:2019-06-28

本文共 1382 字,大约阅读时间需要 4 分钟。

今天晚上没事写了个测试的代码,又看了看.net的并行编程,两个方法,一个是异步async修饰的,另一个是普通的方法,在控制台程序的Main方法里去调用这两个方法,会有什么结果呢?

首先我们看一下方法的组成,step1如下

public async void Step1()        {            try            {                //await进行等待后,新线程的异常可以被主线程捕捉,这是正常的,下面的代码不会被执行                await Task.Run(() =>                {                    Console.WriteLine("Step1 Current ThreadID" + Thread.CurrentThread.ManagedThreadId);                    Thread.Sleep(3000);                });                await Task.Run(() =>                {                    Console.WriteLine("Step1 Current ThreadID" + Thread.CurrentThread.ManagedThreadId);                    Console.WriteLine("ThreadTest.Test Runing");                });            }            catch (Exception ex)            {                Console.WriteLine("ThreadTest" + ex.Message);            }        }

step2如下

public void Step2()        {            Console.WriteLine("Step2 Current ThreadID" + Thread.CurrentThread.ManagedThreadId);        }

我们可以看到step2很简单,不会有什么延时,就是在屏幕上输出一段话,而step1就显得复杂一些了,它是一个异步的方法,并且使用Task.Run开启了两个新线程,而第一

个线程的运行时间是3秒,很长呀,哈哈,第二个是在屏幕上输出一段话!现在我们把step1和step2写在一起会出现什么情况呢?

var test = new ThreadTest(); test.Step1();//整个方法不阻塞,但方法内部有可能阻塞 test.Step2();

通过上面的图我们认识到了,step1按着顺序先执行,而由于第一个线程要执行3秒,这时step2被并行执行,3秒后,step1的第二个线程继续执行(由于使用了await,所以step1内部进行了等待,不会应响他外面的方法,也应响不了,呵呵!

怎么了,看了上面的例如,是不是对并行编程有了新的认识呢!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
ZooKeeper安装
查看>>
[译]浅显易懂的 this 取值规则
查看>>
Express搭建在线便利贴——Webpack配置
查看>>
JavaScript-For 循环和 While 循环
查看>>
原生JS大揭秘—揭开数据类型转换的面纱
查看>>
纯CSS画三角原理解析
查看>>
ArchiMate分层概念
查看>>
Node.js开发系列(一)
查看>>
微软发布Azure Storage不可变存储功能的正式版本
查看>>
一文带你快速读懂.NET CLI
查看>>
5G一周热闻:华为夺联通5G大单,首张5G电话卡发放
查看>>
马化腾演讲、张勇内部讲话暴露两大巨头云上端倪
查看>>
云原生应用程序的架构应该怎么设计?
查看>>
腾讯58篇论文入选CVPR 2019,涵盖视觉对抗学习等方向
查看>>
克服自我限制
查看>>
re:Invent第三天:除了拥抱混合云,AWS还一口气发了这些新产品
查看>>
Java工程师的成长路线图是什么?
查看>>
RedHat发布JBoss 7.2,完全支持Java EE 8规范
查看>>
红帽发布第四季度和2019财年报告,多项指标维持两位数增速
查看>>
精益业务分析宣言解读
查看>>