章节目录
一.异步方法不等于多线程
二.为什么有的异步方法没用async
三.异步编程的几个重要问题
四.Lambda表达式
一.异步方法不等于多线程(借鉴一个博主的案例)
情景:你是一个饭店的厨师,有个订单过来了,要蒸鸡蛋和烤面包
同步:先做蒸鸡蛋,(哪怕是鸡蛋在蒸的时候没事干也不去烤面包,而是在干等),做完了蒸鸡蛋再去烤面包
异步:1.单线程 先做蒸鸡蛋,鸡蛋在蒸的时候,定好闹钟,然后去烤面包,面包在烤的过程中,也定个闹钟,当鸡蛋闹钟响起来的时候,不管是不是在给面包切片还是在等待面包烤熟,都去处理鸡蛋(如把鸡蛋从锅里端上来,送给客人),然后再回来处理烤面包,面包在烤的过程中可以打扫厨房,等烤面包的闹钟响起的时候,再去处理烤面包(如:送给客人)
2.多线程 请两个厨师给你打下手,一个去蒸鸡蛋,一个去烤面包,你做的主要的事情就是协调他们对物品的使用先后顺序,不要让他们因为抢一件东西(比如调料)而打起来(多线程的资源共享问题)。当然,请厨师是要付钱的(多线程的性能损耗)。
二.为什么有的异步方法没用async
有的时候,我们可能会发现有些异步方法没有关键字async,程序同样能够正常运行。
了解这个之前,我们需要知道async函数的缺点;
- 异步方法是一个类(具体需要通过反编译工具看源代码),运行效率没有普通方法高。因为