首页 > 解决方案 > 是否可以执行正在进行的工作

问题描述

我有一个像下面这样的工作

job = GlobalScope.launch {
    delay(5000)
    runOnUiThread {
        some unwanted code
    }
}

该作业将等待 5 秒执行。并在我打电话的 5 秒前取消它

job?.cancel()

现在,有没有办法在 5 秒之前执行这项工作?

我正在寻找类似的东西,job?.forceExecute.ignoreDelays或者job?.forceExecute.ignoreDelay("FirstDelay")是否有类似名称的选项delay(5000,"FirstDelay")

这对我避免样板代码很有帮助。

标签: kotlin

解决方案


有没有办法在 5 秒之前执行这项工作?

回答

使用嵌套job+协程cancellation

尝试这个

job = GlobalScope.launch {
    delayJob = GlobalScope.launch { delay(5000) }
        delayJob.join()

        runOnUiThread {
        some unwanted code
    }
}

// if you want ignore delay
delayJob.cancel()

推荐阅读