使用协程调用适配器工厂取消请求

时间:2018-01-30 19:34:16

标签: android kotlin retrofit2 deferred kotlinx.coroutines

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

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

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

1 个答案:

答案 0 :(得分:2)

如果要取消协程,可以按照此guide中的说明进行操作。您需要在cancel返回的Job上调用launch

val job = launch {
   //...
}

job.cancel() // cancels the job 

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

至于您的示例,只要Client.provideService().getUsers()变为isActive,您就必须取消true的计算。