我正在尝试使用带有协程调用适配器工厂的 retrofit2 在我的 android 应用程序中实现动态搜索功能。当用户键入关键字并且关键字长度有效时,应用程序会向服务器发出请求。在单个请求中,我可以像下面这样请求
launch(UI) {
try {
val user = Client.provideService().getUsers()
//do sometihng with user.await()
}catch (e: Exception){
//Handle exception
}
}
但是如果我想取消之前的所有请求并在用户更改可编辑项时发出新请求怎么办?我搜索了很多示例,但找不到任何有用的东西。感谢您的帮助。
最佳答案
如果你想取消协程,你可以按照 guide 中的说明进行操作.您需要对从 launch
返回的 Job
调用 cancel
:
val job = launch {
//...
}
job.cancel() // cancels the job
但了解协程取消是协作的非常重要,即在协程中执行的 block 需要对来自协程外部的取消使用react。您可以使用 isActive
检查状态,如 here 所述.
对于您的示例,一旦 isActive
变为 ,您就必须能够取消
。Client.provideService().getUsers()
的计算是的
关于android - Retrofit 2 with 协程调用适配器工厂取消请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48529191/