长话短说,我正在运行java/kotlin项目,我正在寻找一种方法来取消kotlin挂起函数,并在环境发生变化时启动协程。在我的代码中,我可以有100个播放器(协程)同时运行,使用挂起函数等,并且每小时或每x次Java都会调用其中的一些播放器。当它发生时,我需要协程来停止该挂起功能,并再次启动协程。代码如下:
internal suspend fun update() {
doesCoolStuff()
goesSomewhere()
delay 20sec
GoesSomewhereElse()
delay 60sec
GoesSomewhereElsex2()
delay 100sec
}
private suspend fun GoesSomewhereElse() {
doesThings()
delay 2 mins
}我的问题是,当java延迟调用挂起函数内部的播放器时,它会执行来自java的操作,然后等待延迟结束,然后开始执行协程开始的CoolStuff。所以基本上我需要一些东西来中断挂起功能,取消所有延迟,然后重新开始协程。像" return“函数,它可以在协程中使用,返回到开头,并从Java重新开始。
编辑:当时间到来时,Java调用播放器。它还做了一些其他的事情,比如传送球员,更改名字,将他添加到活动团队中。如果那个玩家正在做某件事,它会从开始重置couroutine,我有一个如果玩家正在做事情的话。这工作得很好,但是如果玩家在3分钟的延迟中间,它将在这3分钟的剩余时间内站立。在它返回到协程的开始之前,它意识到它在事件中,并且必须做一些事情。
发布于 2021-03-01 23:48:08
保持引用Job
var job: Job? = null
job?.cancel()
job = coroutineScope.launch { aSuspendFunction() }https://stackoverflow.com/questions/66424901
复制相似问题