Kotlin协程将delay
定义为具有关键字suspend
的挂起函数,因此
- 调用
delay
作为main
的直接子语句不是 允许,因为main
不是挂起函数 - 作为
runBlocking
或launch
岁的子元素拨打delay
是允许的,因为那些 函数创建了一个协程作用域.
编译器如何知道这一点?关键字suspend
是语言本身的一部分,而runBlocking
、launch
和库 routine 作用域的概念是通过kotlinx.couroutines
库添加的.由于上面概述的语法判断大概不依赖于该特定实现,它是如何工作的呢?