首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在协程中中断Kotlin挂起函数并重新开始

如何在协程中中断Kotlin挂起函数并重新开始
EN

Stack Overflow用户
提问于 2021-03-01 23:28:16
回答 1查看 251关注 0票数 0

长话短说,我正在运行java/kotlin项目,我正在寻找一种方法来取消kotlin挂起函数,并在环境发生变化时启动协程。在我的代码中,我可以有100个播放器(协程)同时运行,使用挂起函数等,并且每小时或每x次Java都会调用其中的一些播放器。当它发生时,我需要协程来停止该挂起功能,并再次启动协程。代码如下:

代码语言:javascript
复制
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分钟的剩余时间内站立。在它返回到协程的开始之前,它意识到它在事件中,并且必须做一些事情。

EN

回答 1

Stack Overflow用户

发布于 2021-03-01 23:48:08

保持引用Job

代码语言:javascript
复制
var job: Job? = null


job?.cancel()
job = coroutineScope.launch { aSuspendFunction() }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66424901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档