知道了这两点,就可以写出最简单的协程代码:
fun main(args: Array) {
repeat(100_000) { // 启动十万个协程试试
launch { suspendPrint() }
}
Thread.sleep(1200) // 等待协程代码的结束
}
suspend fun suspendPrint() {
delay(1000)
println(".")
}
其中的 delay
就是一个 suspend fun
。
除了以上两点,另一个很重要的概念就是上下文(context
)。协程虽然是依赖于线程的,但一个协程并非就绑死在一个线程上。启动协程的时候可以指定上下文,在协程内部也可以通过 withContext
切换上下文。而这个上下文,也就是一个 CoroutineDispatcher
类的对象,从名字可以看出,就是由它去进行协程调度。比如,如果你需要新建一个线程去跑协程的代码,可以这样:
launch(context = newSingleThreadContext(“new-
thread”)) { delay(1000) }
以上三点是我个人认为重要的内容,当然还有协程的取消、协程的生命周期、协程与子协程的关系等等,这些要点可以去官方文档或者我的翻译查看,内容写得很棒。