kotlin
协程有两个概念,一个是协程作用域,第二个是协程,虚拟机首先会加载协程作用域包括子作用域,因此在各个作用域没有delay的情况下,从上到下执行作用域中的代码,执行完毕后再按照从上到下的顺序执行协程中的代码
fun main1() = runBlocking {var order = 1// this: CoroutineScopefor (i: Int in 1..300)println("first$i:::${order++}")launch {// delay(200L)
// println("Task from runBlocking")delay(2000)for (i: Int in 1..300)println("fourth$i:::${order++}")}for (i: Int in 1..300)println("second$i:::${order++}")coroutineScope {// 创建⼀个新的协程作⽤域launch {for (i: Int in 1..300)println("fifth$i:::${order++}")
// delay(500L)
// println("Task from nested launch")
// delay(100L)
// println("Task from coroutine scope") // 该⾏将在嵌套启动之前执⾏打印}for (i: Int in 1..300)println("third$i:::${order++}")
// println("Coroutine scope is over") // 该⾏将在嵌套结束之后才会被打}for (i: Int in 1..300)println("sixth$i:::${order++}")
}
协程作用域和协程中的代码执行顺序
first second third fourth fifth sixth
kotlin
协程有两个概念,一个是协程作用域,第二个是协程,虚拟机首先会加载协程作用域包括子作用域,因此在各个作用域没有delay的情况下,从上到下执行作用域中的代码,执行完毕后再按照从上到下的顺序执行协程中的代码
fun main1() = runBlocking {var order = 1// this: CoroutineScopefor (i: Int in 1..300)println("first$i:::${order++}")launch {// delay(200L)
// println("Task from runBlocking")delay(2000)for (i: Int in 1..300)println("fourth$i:::${order++}")}for (i: Int in 1..300)println("second$i:::${order++}")coroutineScope {// 创建⼀个新的协程作⽤域launch {for (i: Int in 1..300)println("fifth$i:::${order++}")
// delay(500L)
// println("Task from nested launch")
// delay(100L)
// println("Task from coroutine scope") // 该⾏将在嵌套启动之前执⾏打印}for (i: Int in 1..300)println("third$i:::${order++}")
// println("Coroutine scope is over") // 该⾏将在嵌套结束之后才会被打}for (i: Int in 1..300)println("sixth$i:::${order++}")
}
协程作用域和协程中的代码执行顺序
first second third fourth fifth sixth
发布评论