小编ada*_*ong的帖子

在同一线程上调用新协程时如何取消旧协程

目前我有这个代码块。

如果用户停留在同一个 Fragment 上,我会apiGetObject从 API获取并且我想用 来更新它resetTime - current(请注意,该值将始终为 3 分钟)。

此代码将延迟该needReload.value = true时间。

GlobalScope.launch(Dispatchers.Main) {
    apiGetObject.value?.resetTime?.let {
        if (it - System.currentTimeMillis() > 0) {
            delay(it - System.currentTimeMillis())
        }
    }
    needReload.value = true
}
Run Code Online (Sandbox Code Playgroud)

现在我检索每个对象onResume以刷新数据(这是必须的)。因此,如果在 3 分钟窗口下恢复 Fragment,则会启动另一个协程。

=> 这使得数据

我想要的是:

我想如果有一个新的协程启动然后前一个被取消/销毁。有没有办法做到这一点(欢迎这个协程的其他解决方案)

注意:我将 MVVM 与 LiveData 一起使用,我得到了apiGetObjectRetrofit 和 RX

multithreading android coroutine kotlin kotlin-coroutines

3
推荐指数
1
解决办法
1730
查看次数