Android runBlocking(Dispatchers.IO)是否会阻止主线程,即使协同路由上下文不是Dispatchers.main?

Android runBlocking(Dispatchers.IO)是否会阻止主线程,即使协同路由上下文不是Dispatchers.main?,android,kotlin,kotlin-coroutines,Android,Kotlin,Kotlin Coroutines,我正在用Kotlin学习Android,并且我已经了解到在不阻塞主线程的情况下启动协同路由的推荐方法是执行以下操作 MainScope().launch { withContext(Dispatchers.IO) { // Do IO work here } } 但是我还想知道下面的调用not是否会阻塞主线程,因为它仍在使用Dispatchers.IO runBlocking(Dispatchers.IO) { // Do IO work here } 如果从主线程调用

我正在用Kotlin学习Android,并且我已经了解到在不阻塞主线程的情况下启动协同路由的推荐方法是执行以下操作

MainScope().launch {
  withContext(Dispatchers.IO) {
    // Do IO work here
  }
}

但是我还想知道下面的调用not是否会阻塞主线程,因为它仍在使用
Dispatchers.IO

runBlocking(Dispatchers.IO) {
  // Do IO work here
}

如果从主线程调用
runBlocking(Dispatchers.IO)
,那么当协同程序在IO调度程序上完成时,主线程将被阻塞

以下是文档中对此的说明:

当上下文中显式指定了CoroutineDispatcher时,则 新的协同路由在指定调度程序的上下文中运行 当当前线程被阻塞时。如果指定的调度程序是 另一个runBlocking的事件循环,则此调用使用外部 事件循环


您可以在这里找到文档:

如果您从主线程调用
runBlocking(Dispatchers.IO)
,那么当协同程序在IO调度程序上完成时,主线程将被阻塞

以下是文档中对此的说明:

当上下文中显式指定了CoroutineDispatcher时,则 新的协同路由在指定调度程序的上下文中运行 当当前线程被阻塞时。如果指定的调度程序是 另一个runBlocking的事件循环,则此调用使用外部 事件循环

您可以在此处找到文档: