Kotlin multiplatform:如何在没有运行阻塞的情况下以阻塞方式启动协同路由

Kotlin multiplatform:如何在没有运行阻塞的情况下以阻塞方式启动协同路由,kotlin,kotlin-coroutines,kotlin-multiplatform,Kotlin,Kotlin Coroutines,Kotlin Multiplatform,我使用kotlin multiplatform,它禁止在公共代码中使用runBlocking,因为JS实现不支持它 我的目标是能够从非挂起函数调用挂起函数,如下面的示例所示。此外,我不关心JS,因为我将只使用JVM、Android和iOS目标 fun main() { runBlocking { doSomething() } } suspend fun doSomething() { } 我可以考虑的一个解决方案是创建预期类和实际类,并在每个平台实际类上分别进行ru

我使用kotlin multiplatform,它禁止在公共代码中使用runBlocking,因为JS实现不支持它

我的目标是能够从非挂起函数调用挂起函数,如下面的示例所示。此外,我不关心JS,因为我将只使用JVM、Android和iOS目标

fun main() {
   runBlocking {
      doSomething()
   }
}

suspend fun doSomething() {
}
我可以考虑的一个解决方案是创建预期类和实际类,并在每个平台实际类上分别进行runBlocking调用,但我希望避免这种情况,因为这将导致一些代码重复

 runBlocking {
      doSomething()
   }

有没有更好的解决方案,如何在公共模块中将阻塞代码和非阻塞代码桥接在一起?

在公共代码中,您可以使用:

CoroutineScope(Dispatchers.Default).launch {
}

取决于您需要的范围

如果您的目标是iOS,请不要忘记使用
-native mt
版本的协同程序,更多信息

这不会像
runBlocking
那样阻塞当前线程,因此如果您确实需要此功能,您确实必须使用
expect
/
actual
实现它,但我没有遇到类似的需要

MainScope().launch {
}