Kotlin提供一个suspend 关键字,使用它可以将任意函数声明成挂起函数,而挂起函数之间是可以相互调用的,如下所示:
suspend fun printDot() {
println(".")
delay(1000) //是一个挂起函数,所以可以在printDot()函数中调用
}
但是,suspend()函数只能将一个函数声明成挂起函数,是无法给它提供协程作用域的。比如你现在尝试在printDot()函数中调用launch函数,一定是无法调用成功的,因为launch函数要求必须在协程作用域当中才能调用。
这个问题可以借助coroutinesScope函数来解决。coroutineScope函数也是一个挂起函数,因此可以在任何其他挂起函数中调用。它的特点是会继承外部的协程作用域并创建一个子作用域,借助这个特性,我们就可以给任意挂起函数提供协程作用域了。示例写法如下:
suspend fun printDot() = coroutineScope{
launch {
println(".")
delay(1000)
}
}