1 suspend函数 挂起的不是线程,也不是函数 !而是挂起的协程块,将协程块切到另外一个线程
2 协程块就是
launch(Dispatchers.Main){
\\ todo 在这里!!
} 里的代码挂起的定位: 暂时切走脱离当前线程,执行完函数后再切回来
1 ************协程的挂起本质就是切线程 *************
2 基于线程而实现的一套更上层的工具API
3 只不过挂起函数执行完毕后,协程会稍后自动重新切回它原先的所在线程从哪里挂起
先别看图,看懂下面的描述,再对应图里的代码
1 声明的suspend从当前线程(main)开始挂起,脱离当前执行它的的线程,协程块suspend里的代码就没有在当前线程跑了
2 当前线程( main )遇到suspend函数时 就等于跳过当前代码(suspend里的逻辑代码,suspend被挂起),而挂起的逻辑代码在它声明的指定线程里(IO)等待执行..。
3 执行完IO后,函数又会帮我们自动切回到main线程,可以设置特殊的Dispathcers(调度器) ,不切回去。
4 Dispathcers 指定协程执行的线程 ,还能在suspned挂起函数执行完之后,自动再切回去
注意的地方是 ,挂起后 不是这个协程块停下来了!像异步分发
suspend 它的作用
- 起提醒作用 提醒你在协程块里调用挂起函数! 协程块是啥? 见顶部
并不是声明它了 ,函数就立马挂起了,真正起决定的是里面声明类似 withContext(Dispathcers.IO)、async() 等函数里的底部代码
async() 也是创建协程的函数
第一节笔记 juejin.cn/post/684490…
视频课www.bilibili.com/video/av682… @扔物线 期待下一节协程讲课