android 在某些点上取消Kotlin协程作业

thtygnil  于 2023-05-21  发布在  Android
关注(0)|答案(1)|浏览(211)

当执行到第一个可挂起的函数时,Kotlin协程作业将被取消。但是我希望这种取消发生在我想要的某些点上,而不是任何可挂起的函数调用。
我想在某些点上检查取消并手动完成作业,就像线程中断一样。
假设一个作业正在运行,并达到了一个延迟函数,然后发生了取消,我想捕捉取消异常并设置标志running = false,然后继续执行作业,并在我想要的地方完成作业。
考虑到我希望延迟函数调用在取消发生时被取消,并且不等待延迟。
我还想提一下,我正在Android Studio中做这件事。

3vpjnl9f

3vpjnl9f1#

您是否尝试过invokeOnCompletion函数在作业取消时执行任何需要的操作?
应该是这样的:

val job = launch {

    ...

}

job.invokeOnCompletion { 
    if (job.isCancelled) {
        //Do whatever you need here when the job is cancelled
        ...
    }
}

如果你需要在任务取消后继续执行它,那么就用某种检查点来设计它,然后你就可以设置了。

相关问题