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

本文共 1342 字,大约阅读时间需要 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内部进行了等待,不会应响他外面的方法,也应响不了,呵呵!

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

转载地址:http://ilphl.baihongyu.com/

你可能感兴趣的文章
Linux自动执行sh脚本
查看>>
转:消息队列
查看>>
Ansible
查看>>
软件测试Lab2 Selenium及自动化测试
查看>>
ubuntu配置lamp运行环境笔记
查看>>
Redis 数据库结构设计
查看>>
2016过狗菜刀下载 2016过狗刀 过狗菜刀下载
查看>>
day8--socket文件传输
查看>>
P/Invoke Interop 实例
查看>>
百分比宽度div如何水平居中
查看>>
最后一位
查看>>
Vue学习笔记(1)——在页面右上角实现可悬浮/隐藏的系统菜单
查看>>
Java Thread 的使用
查看>>
[Noip2016]换教室(期望+DP)
查看>>
【译】使用 React,TypeScript 和 Webpack 开始一个项目
查看>>
3555: [Ctsc2014]企鹅QQ
查看>>
Mysql分库分表方案之spider存储引擎(一)
查看>>
【BZOJ】2502 清理雪道
查看>>
NSProxy的简单使用
查看>>
【CodeForces】704 C. Black Widow 动态规划+模拟
查看>>