我有一个Viewmodel
,在这里我使用awaitAll()
开始了很多工作。我的逻辑是,如果一项工作失败,我需要使用viewModelScope.cancel()
取消其他工作。这部分工作正常,但是取消后如何运行其他作业?我应该如何重新初始化viewModelScope
?
fun runMyJobs() {
viewModelScope.launch(Dispatchers.IO) {
val deferreds = listOf(
async {
homeRepo.startJob1(
errListener = this@HomeActivityViewModel
)
},
async {
homeRepo.startJob2(
errListener = this@HomeActivityViewModel
)
}
)
deferreds.awaitAll()
launch(Dispatchers.Main) {
//some work after both jobs are done
}
}
}
如果收到回调错误,我会取消工作:
override fun simpleError(err: String) {
viewModelScope.launch(Dispatchers.Main) {
error.value = err
viewModelScope.cancel()
}
}