Retrofit 2 with 协程调用适配器工厂取消请求

Retrofit 2 with coroutine call adapter factory cancel request

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

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 

但是知道协程取消是协作的是非常重要的,即在协程中执行的块需要对来自协程外部的取消做出反应。您可以按照 here.

所述使用 isActive 检查状态

对于您的示例,您必须能够在 isActive 变为 true 后立即取消 Client.provideService().getUsers() 的计算。