在此代码中:
private suspend fun doSthSingleThreaded(){
coroutineScope {
//Coroutine 1
launch {
//do sth that will suspend
}
//Coroutine 2
launch {
//Do sth else that will suspend too
}
}
}
有没有办法让这两个协程始终共享底层线程?这就是我希望它工作的方式(我想以它们都使用 threadA 的方式调整代码):
您可以使用 newSingleThreadContext 获得单线程绑定的协程调度程序。但请注意:
专用线程是非常昂贵的资源。在真实的应用程序中,当不再需要时,必须使用 close 函数释放它,或者将其存储在顶级变量中并在整个应用程序中重用。
如果您只需要限制并行度,您可以使用 limitedParallelism 代替:
Dispatchers.Default.limitedParallelism(1)
。
private suspend fun doSthSingleThreaded() {
val confined = newSingleThreadContext("My Thread")
// or
// val confined = Dispatchers.Default.limitedParallelism(1)
coroutineScope {
//Coroutine 1
launch(confined) {
//do sth that will suspend
}
//Coroutine 2
launch(confined) {
//Do sth else that will suspend too
}
}
}