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 是否正确?,
- 是因为线程池中没有更多的可用线程。
- Dispatchers.Default 可能会有延迟,因为它的线程数有限。
使用 Dispatchers.Default 正确吗?,
- 因为它由 JVM 上的共享线程池支持。
- 因为它是 3 个子协程的父级?
- 因为它是 Dispatchers.Main
协程的父级
注意:如果我上面的理解有误,请指正。
问题区域:适合父调度器使用的调度器是什么?
我会使用 Dispatchers.Main
作为协程范围的上下文:
fun execute(vararg params: Params?) {
job = CoroutineScope(Dispatchers.Main).launch {
onPreExecute()
val result = withContext(Dispatchers.IO) {
doInBackground(*params)
}
onPostExecute(result)
}
}
在这种情况下,您不需要将 Dispatchers.Main
的上下文切换到 onPreExecute
和 onPostExecute
函数。
我正在尝试使用协同程序实现异步任务功能。通过以下代码片段,我能够实现异步任务功能。
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 是否正确?,
- 是因为线程池中没有更多的可用线程。
- Dispatchers.Default 可能会有延迟,因为它的线程数有限。
使用 Dispatchers.Default 正确吗?,
- 因为它由 JVM 上的共享线程池支持。
- 因为它是 3 个子协程的父级?
- 因为它是 Dispatchers.Main 协程的父级
注意:如果我上面的理解有误,请指正。
问题区域:适合父调度器使用的调度器是什么?
我会使用 Dispatchers.Main
作为协程范围的上下文:
fun execute(vararg params: Params?) {
job = CoroutineScope(Dispatchers.Main).launch {
onPreExecute()
val result = withContext(Dispatchers.IO) {
doInBackground(*params)
}
onPostExecute(result)
}
}
在这种情况下,您不需要将 Dispatchers.Main
的上下文切换到 onPreExecute
和 onPostExecute
函数。