其实就是回调,没那么难理解,举个例子:
doSth(xxx,new Listener(){
success(){}
})
success 就是写在回调里面的,这种方式一个是比较丑陋,第二个是会有回调地狱的问题,doSth 可以跑在主线程,success 可以跑在子线程里面,后面为了解决丑陋的问题,就有了 await 这个关键字,js 和 c#都有,语法就变成了这样:
await doSth()
success()
看到没有,如果有 await 他的语法是等价于上面那种东西的,doSth 可以跑在主线程,success 跑在了子线程里面,也就是用同步的方式写异步代码,线程发生了切换,但执行的顺序是同步的,本质上是回调
然后到了 kotlin,首先,kotlin 吹嘘协程是对开发产生了误导,他的本质其实就是类似 await,通过语法把回调屏蔽掉:
launch{
doSth()
success()
}
suspend doSth()
而 suspend 关键字就是类似于 await,async 的 async 一样,其实就是打个标记,告诉编译器,后面可以加回调,当线程执行 success 时,doSth 方法没有被执行,也就是所谓的挂起来了,而添加回调的方式叫做 continuation,也就是反编译后是类似这样的语法
doSth().continuation(success())
大概这样子
多多上面有英语一对一的课程,如果不介意口音的话,可以选择菲律宾老师,很便宜
以前喜欢买纸质书,翻着看有感觉,后来搬了几次家,实在搬累了,大概有个四五十本吧,然后全卖掉了,现在都是找电子的看,纸质书还有个坏处就是除非买的很明确,不然很容易被坑,被书的内容坑