如何解决我想在使用 kotlin 协程的 android 上超时后取消一个函数,但它不起作用
我想做的是用谷歌云翻译翻译文本列表,这是可行的,但有时很慢。因此,在 10 秒后,我想取消它并使用 withTimeoutOrNull 块,但它不会取消它即使在超时后仍继续运行的操作。
lifecycleScope.launch {
withContext(dispatchers.IO) {
var imageClassesListInHungarian = listof<String>()
withTimeoutOrNull(10000) {
imageClassesListInHungarian = translateList(
imageClassesList,"hu",resources
)
} // cannot be cancelled but I don't kNow why
...
}
}
fun translateList(originalTextsList: List<String>,targetLanguage: String,resources: Resources): List<String> {
val translatedTextsList = mutablelistof<String>()
try {
val translate = getTranslateService(resources)
val translation = translate?.translate(originalTextsList,Translate.TranslateOption.targetLanguage(targetLanguage),Translate.TranslateOption.model("base"))
if (translation != null) {
for(t in translation) {
translatedTextsList.add(t.translatedText)
}
}
}
catch (e: TranslateException) {
e.printstacktrace()
}
return translatedTextsList
}
解决方法
看看withTimeoutOrNull
documentation:
在具有指定超时的协程中运行给定的暂停代码块,如果超过此超时则返回 null
这意味着您的 translateList
函数需要暂停函数。
这里有一个很好的 tutorial 解释了如何将回调函数转换为挂起函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。