1

我正在尝试使用带有协程调用适配器工厂的retrofit2在我的android应用程序中实现动态搜索功能。当用户键入关键字并且关键字长度有效时,应用程序向服务器发出请求。在单个请求中,我可以请求如下

launch(UI) {
        try {
            val user = Client.provideService().getUsers()
            //do sometihng with user.await()
        }catch (e: Exception){
            //Handle exception
        }
    }

但是如果我想在用户更改可编辑项时取消每个先前的请求并发出新请求怎么办?我搜索了很多例子,但我找不到任何有用的东西。感谢帮助。

4

1 回答 1

3

如果您想取消协程,可以按照本指南中的说明进行操作。您需要调用从返回cancel的那个:Joblaunch

val job = launch {
   //...
}

job.cancel() // cancels the job 

但重要的是要知道协程取消是合作的,即在协程中执行的块需要对协程外部的取消作出反应。您可以isActive按照此处所述检查状态。

至于您的示例,您必须能够取消Client.provideService().getUsers()asisActive的计算true

于 2018-01-30T20:00:57.307 回答