android - 嵌套协程:父协程调度器的类型
问题描述
我正在尝试使用协程实现异步任务功能。使用下面的代码片段,我可以实现异步任务功能。
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
foronPreExecute
和onPostExecute
函数。
推荐阅读
- git - Jenkins GitHub Webhook 未触发构建
- wso2 - 如何测试响应缓存是否适用于 WSO2 3.0.0 APIM 中的 API?
- javascript - 为什么在尝试导入 CSS 文件时出现 SyntaxError:导入声明可能只出现在模块的顶层?
- reactjs - 使用 Test Renderer 测试多个 React 组件状态更改
- c# - 如何访问包含在 json 文件内的列表中的字典中的值
- android-studio - Android Studio 未在 Ubuntu 20.04 中启动,因为我从 Andrioid Studio 设置中编辑了 vmoptions
- java - 从其他外部 Spring Boot 应用程序调用 api
- ios - 在 mac 上安装配置文件时出错。(未能在此设备上安装一个或多个配置文件)
- android - 在不禁用文件上传的情况下禁用 webview 中的文件访问
- dhcp - 如何在 dhcpd.conf 中指定接口?