Nested Coroutine : 父协程调度器的类型

Nested Coroutine : type of parent coroutine dispatcher

我正在尝试使用协同程序实现异步任务功能。通过以下代码片段,我能够实现异步任务功能。

fun execute(vararg params: Params?) {
    job = CoroutineScope(Dispatchers.Default).launch {
        withContext(Dispatchers.Main) {
            onPreExecute()
        }

        withContext(Dispatchers.IO) {
            doInBackground(*params)
        }

        withContext(Dispatchers.Main) {
            onPostExecute(result)
        }
    }
}

我只是担心,在父协程上使用哪个调度程序。是Dispatchers.Default(或)Dispatchers.IO。 两个调度程序的功能都运行良好。

使用 Dispatchers.IO 是否正确?,

  1. 是因为线程池中没有更多的可用线程。
  2. Dispatchers.Default 可能会有延迟,因为它的线程数有限。

使用 Dispatchers.Default 正确吗?,

  1. 因为它由 JVM 上的共享线程池支持。
  2. 因为它是 3 个子协程的父级?
  3. 因为它是 Dispatchers.Main
  4. 协程的父级

注意:如果我上面的理解有误,请指正。

问题区域:适合父调度器使用的调度器是什么?

我会使用 Dispatchers.Main 作为协程范围的上下文:

fun execute(vararg params: Params?) {
    job = CoroutineScope(Dispatchers.Main).launch {
        onPreExecute()

        val result = withContext(Dispatchers.IO) {
            doInBackground(*params)
        }

        onPostExecute(result)
    }
}

在这种情况下,您不需要将 Dispatchers.Main 的上下文切换到 onPreExecuteonPostExecute 函数。