C#~异步编程再续~async异步方法与同步方法的并行
今天晚上没事写了个测试的代码,又看了看.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内部进行了等待,不会应响他外面的方法,也应响不了,呵呵!
怎么了,看了上面的例如,是不是对并行编程有了新的认识呢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2013-09-16 DDD~Unity在DDD中的使用
2013-09-16 DDD~领域层
2011-09-16 多层架构在业务逻辑层实现IOC
2011-09-16 一个面向对象的JS例子,很好的支持了开闭原则(不要重复你昨天的代码)