kotlin 协程
CoroutineScope 协程作用域
coroutine 运行的范围,同时提供一个协程运行的上下文。
Coroutine 协程
协程是一个可暂停过程的实例。在概念上它与线程类似,具体来说,就是可以让一个代码块与其他代码同时运行。然而,协程并不会绑定到某一个特定的线程上。它可以在一个线程上暂停,然后在另一个线程上继续。
Coroutine Builders 协程构建器
有多种方法可以创建一个协程
- launch 在一个协程作用域中启动一个子协程
- async 在一个协程作用域中启动一个子协程,与 launch 的区别在于 async 方法返回一个 Deferred 对象,这个对象可以通过 await 方法暂停父协程,直到子协程完成计算返回结果后让父协程继续。
- runBlocking 创建一个阻塞当前线程的协程,通常在测试中使用
Coroutine Scope Builders 协程作用域构建器
coroutineScope 可以创建一个协程作用域
协程上下文
协程运行的环境,包括协程名字,拦截器,调度器,异常处理等等
- withContext 切换协程的上下文
suspend 挂起
被该关键字修饰的方法执行时会挂起(暂停)协程。
suspend 方法只能在协程或另一个 suspend 方法中调用,这意味着,在这个方法调用栈中,栈底一定是一个协程,而栈顶是 kotlin 已经实现好了的 suspend 方法,比如 suspendCancellableCoroutine 方法。
从实现原理上来讲,suspend 是通过 CPS (Continuation-Passing-Style) 方法将一个 callback 形式的方法转变成一个同步返回的方法。