网络状态重试回调

Network status retry callback

我有一个 API return 网络状态,我想为 API 调用添加重试和取消功能

@GET("{path1}/{path2}")
suspend fun status(
    @HeaderMap headers: Map<String, String>
): Status?

这是调用 API 的服务 class

override suspend fun status(): Status? =
    service.status(
        path1 = PATH_ONE,
        path2 = PATH_TWO,
        headers = mapOf(
            USER_AGENT to userAgent,
            ACCEPT to accept,
            ACCEPT_LANGUAGE to locale,
            X_APP_GUID to xAppGuid
        )
    )

我面临的问题是,要使用 retrofit2.enqueue() 和 retrofit2.cancel() 函数,我需要将 status() 函数的 return 类型更改为调用,但随后我面临无法向用户 return 的问题,因为 Call() 是一个接口且无法实例化,我需要 return 实际状态。

有人知道怎么做吗?

当使用 Retrofit with Coroutines 时你不需要使用 Call.

suspend 函数(由 Retrofit 返回)是可取消的,取消时会尝试取消调用。这意味着:

myScope.launch { status(...) }

将在 myScope 被取消时被取消。您也可以保留对返回的 Job 的引用并自行取消。

要重试,您可以查看

retryIO(times = 3) { status(...) }