Pet*_*der 1 android kotlin kotlin-coroutines
我用来Coroutines处理异步作业:
viewModelScope.launch {
val userResponse = getUsers() //suspendable function
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是停止所有现有/正在进行的协程作业。想法是我单击不同的选项卡。如果getUsers()需要长达 5 秒的时间并且用户从“用户”选项卡单击到“作业”选项卡,我希望停止现有的 API 调用并且不会观察到响应。
我尝试做viewModelScope.cancel(),但这似乎不起作用。
问题是 - 如何在单击按钮时取消现有作业?
Job在类中定义一个可重用的,如下所示ViewModel:
private var job = Job()
get() {
if (field.isCancelled) field = Job()
return field
}
Run Code Online (Sandbox Code Playgroud)
将其作为父级传递给所有启动协程构建器Job:
viewModelScope.launch(job) {
val userResponse = getUsers()
}
viewModelScope.launch(job) {
// some other work
}
...
Run Code Online (Sandbox Code Playgroud)
单击按钮时,只需取消父作业:
fun cancelAll() {
job.cancel()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3793 次 |
| 最近记录: |