点击查看CoroutineStart英文文档
创建协程的三种方式
协程的四种启动模式一:DEFAULT
示例
fun main() = runBlocking {
val job = launch (start = CoroutineStart.DEFAULT){
println("开始执行耗时操作...")
delay(2000L)
println("耗时操作结束")
}
delay(1000L)
job.cancel()
println("任务取消了")
}
协程的四种启动模式二:LAZY
fun main() = runBlocking {
val job = async (start = CoroutineStart.LAZY){
println("开始执行耗时操作...")
delay(2000L)
println("耗时操作结束")
}
delay(1000L)
job.cancel()
println("任务取消了")
job.await()
}
协程的四种启动模式三:ATOMIC
fun main() = runBlocking {
val job = async(start = CoroutineStart.ATOMIC) {
println("开始执行耗时操作...")
//在挂起点之前不会被取消
delay(2000L)//这里就是一个挂起点, delay是挂起函数
println("耗时操作结束")
}
delay(1000L)
job.cancel()
println("任务取消了")
}
协程的四种启动模式四:UNDISPATCHED
fun main() = runBlocking {
val job = async(context = Dispatchers.IO, start = CoroutineStart.UNDISPATCHED) {
println("开始执行耗时操作... ${Thread.currentThread().name}")
//在挂起点之前不会被取消
delay(2000L)//这里就是一个挂起点, delay是挂起函数
println("耗时操作结束...${Thread.currentThread().name}")
}
delay(1000L)
job.cancel()
println("任务取消了...${Thread.currentThread().name}")
}
推荐
Kotlin:组合挂起函数