取消视图模型范围后无法启动作业

时间:2019-08-02 06:10:01

标签: android android-viewmodel kotlin-coroutines

我有一个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()
    }
}

0 个答案:

没有答案