嵌套协同程序:父协同程序调度程序的类型

时间:2020-06-19 09:24:06

标签: android kotlin kotlin-coroutines kotlin-android-extensions

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

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

注意:如果我的理解有误,请纠正我。

问题区域:父调度程序适合使用什么调度程序?

1 个答案:

答案 0 :(得分:1)

我将Dispatchers.Main用作协程范围的上下文:

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

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

        onPostExecute(result)
    }
}

在这种情况下,您无需将Dispatchers.MainonPreExecute函数的上下文切换到onPostExecute