Launch在Kotlin中给出了遵从性错误

Launch在Kotlin中给出了遵从性错误,kotlin,kotlin-coroutines,Kotlin,Kotlin Coroutines,我在科特林试了一些东西。下面代码中的启动给出了一个编译错误。但是,GlobalScope.launch可以工作,并且在runBlocking中提供launch也可以工作 fun main() { launch{ } } 如果您看到以下内容的定义: 有趣的合作计划 上下文:CoroutineContext=EmptyCoroutineContext, 开始:CoroutineStart=CoroutineStart.DEFAULT, 块:挂起协同作用域。->单元 :工作来源

我在科特林试了一些东西。下面代码中的启动给出了一个编译错误。但是,GlobalScope.launch可以工作,并且在runBlocking中提供launch也可以工作

 fun main() {
    launch{

    } }

如果您看到以下内容的定义:

有趣的合作计划 上下文:CoroutineContext=EmptyCoroutineContext, 开始:CoroutineStart=CoroutineStart.DEFAULT, 块:挂起协同作用域。->单元 :工作来源 它是的扩展函数,因此必须在协同outineScope上调用

如果您使用runBlocking,它将给您一个CoroutineScope作为块中的这个变量,因此launch隐式地是this.launch

为了启动协同路由,它必须有一个生命周期和一个实例,该实例包含在协同路由作用域的内部

因此,如果您想要协同程序,有两种常见做法:

运行阻塞单线程启动

fun main=runBlocking{//this:CoroutineScope launch{}//implicit this.launch{} } coroutineScope工厂函数在主线程启动,但在需要时切换到默认调度程序

suspend-fun-main=coroutineScope{//this:coroutineScope launch{}//implicit this.launch{} }
这样的函数是不可能的,因为它没有实现CoroutineScope