首页 > 解决方案 > Kotlin/Native:如何异步执行阻塞调用?

问题描述

截至目前,Kotlin/Native 是单线程的。因此,以下代码将被阻止sleep

coroutineScope {
  launch { plaform.posix._sleep(100000) }
  launch { println("Hello")             }
}

但是,它有一种新颖的并发机制,称为Workers。然而,即使使用 worker,主线程也会被长时间运行的 posix 调用阻塞:

coroutineScope {
  launch { Worker.start().execute(TransferMode.SAFE, { }, { plaform.posix._sleep(100000) }).consume{ } }
  launch { println("Hello") }
}

上面的两个片段都不会 print Hello

异步执行一系列昂贵的阻塞调用的正确方法是什么?

标签: kotlinkotlin-multiplatformkotlin-native

解决方案


K/N 有一个多线程版本的 kotlin 协程,它目前位于一个单独的分支上:native-mt

您可以使用Dispatchers.Default将任务卸载到后台线程


推荐阅读