C#Async await异步编程
Async await
方法使用Async修饰符修饰.
返回类型仅有三种: void,Task,Task<T>
方法内部使用await关键字标明开始执行异步代码
await标志前的代码是同步执行,await标志的方法是异步执行,await标志的方法后面的代码相当于"回调函数",在await标志的异步方法后面执行.
所以使用Async await异步编程之后代码的执行顺序会变成下面这样:
示例
static void Main(string[] args) { Console.WriteLine("Let`s Do This!"); Console.WriteLine("I am going to call my son."); Example e = new Example(); e.AsyncTask();//调用Async修饰的方法 Console.WriteLine("My son is busy now,and I will go on."); Console.WriteLine("I`m done!"); Console.ReadLine(); } //Async修饰的方法 public async Task AsyncTask() { Console.WriteLine($"我是方法AsyncTask"); var result = await WasteTime(); Console.WriteLine(result); Console.WriteLine("我已经干完了我应该干的事情!"); } private async Task<string> WasteTime() { return await Task.Run(() => { Thread.Sleep(1);//避免Console.WriteLine执行太快使整个程序执行起来像是同步执行的 Console.WriteLine("我开始异步执行了!"); Console.WriteLine("可是我啥都不想干,还是等个五秒钟就跟主线程说我做好了吧"); Thread.Sleep(5000); return "我异步执行完了"; }); }
运行效果如下:
Let`s Do This! I am going to call my son. 我是方法AsyncTask 我开始异步执行了! My son is busy now,and I will go on. I`m done! 可是我啥都不想干,还是等个五秒钟就跟主线程说我做好了吧 我异步执行完了 我已经干完了我应该干的事情!
为什么Thread < ThreadPoll
Thread默认创建的是前台线程,每次初始化一个Thread的示例,就会创建一个新的线程!
ThreadPoll默认创建的是后台线程,每次启用线程会从线程池寻找空闲的线程,如果找到了,就会调用这个空闲的线程,而不是直接创建一个新的的线程.
而每次创建一个线程,起码约消耗1M的内存.
因此在需要开启大量线程的情况下,相比于Thread,ThreadPoll具有减少开启新线程消耗的资源,以及统一管理线程的优势!
为什么ThreadPoll < Task
ThreadPool使用的是线程池全局队列,全局队列中的线程依旧会存在竞争共享资源的情况,从而影响性能。
Task基于ThreadPool实现,相当于ThreadPoll的优化版.它不再使用线程池的全局队列,而是使用的本地队列,使线程之间的资源竞争减少。同时Task提供了丰富的API来管理线程、控制。但是相对前面的两种耗内存,Task依赖于CPU对于多核的CPU性能远超前两者,单核的CPU三者的性能没什么差别。
为什么Task < Async await
1.举个例子:
现在需要实现一个,异步写数据库,写成功之后需要在页面上弹出一个小窗提示.
如果你用task.result来实现的话,那么在获取到结果之前,task会使你的项目进去一个阻塞状态.也就是说在小窗弹出来之前,你的程序会一直卡主!从而形成异步编程中的同步阻塞
而Async await则不会发生这种情况.你需要做的仅仅只是在await修饰的方法后面调一个弹出小窗的方法而已.也就是传说中的异步阻塞
2.Async await风格的编程会使代码看起来更像是同步代码,也就更像清新移动更通俗.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架