我正在学习使用 Kotlin 开发 Android,了解到在不阻塞主线程的情况下启动协程的推荐方式如下:
MainScope().launch {
withContext(Dispatchers.IO) {
// Do IO work here
}
}
但我也在想,下面的调用不会阻塞主线程,因为它仍然使用Dispatchers.IO
runBlocking(Dispatchers.IO) {
// Do IO work here
}
我正在学习使用 Kotlin 开发 Android,了解到在不阻塞主线程的情况下启动协程的推荐方式如下:
MainScope().launch {
withContext(Dispatchers.IO) {
// Do IO work here
}
}
但我也在想,下面的调用不会阻塞主线程,因为它仍然使用Dispatchers.IO
runBlocking(Dispatchers.IO) {
// Do IO work here
}
runBlocking(Dispatchers.IO)
,那么主线程将会被阻塞,直到协程在 IO 调度器上完成。调度程序通常不会导致实际切换到另一个线程。在这种情况下, * 底层实现会尽力保持执行在同一线程上。
https://github.com/Kotlin/kotlinx.coroutines/pull/3236/files
runBlocking
的调用者的角度来看,主线程都被阻塞,无法使用。 - undefined