【问题标题】:swift async await pause task and waiting for some data快速异步等待暂停任务并等待一些数据
【发布时间】:2023-02-03 17:08:28
【问题描述】:

我需要在设备未连接到互联网时进行无限加载

示例:如果用户在应用程序执行请求时失去互联网连接,则应用程序必须等待互联网连接恢复并再次尝试执行请求

我用完成来做

func getData(completion: ((SomeData?) -> Void)?) {
    apiService.getSomeData() { [weak self] result in
        switch result {
        case .success(let data):
            return data
        case .failure(let error):
            switch error {
            case .networkError:
                let getDataTask: () -> Void = {
                    self?.getData()
                }
                if self?.isConnectedToTheInternet == true {
                    DispatchQueue.global().asyncAfter(
                        deadline: .now() + requestRepeatDelay,
                        execute: getDataTask
                    )
                } else {
                    // when internet connection will be restore then execute all tasks from onConnectionToTheInternetRestoredTasks
                    self?.onConnectionToTheInternetRestoredTasks.append(getDataTask)
                }
            default:
                throw error
            }
        }
    }
}

但现在我需要在 async/await 中重构它

func getData() async throws -> SomeData {
    let result = await apiService.getSomeData()
    switch result {
    case .success(let data):
        return data
    case .failure(let error):
        switch error {
        case .networkError:
            // need to do wating for restore and try again
        default:
            throw error
        }
    }
}

我不知道如何在getData() async throws中处理.networkError以等待恢复连接

你能给我解释一下吗?

【问题讨论】:

    标签: swift async-await


    【解决方案1】:

    最简单的方法可能是让任务休眠

    switch error {
        case .networkError:
            try await Task.sleep(for: ...) 
            return try await getData()
    

    您需要查看文档以了解将 requestRepeatDelay 属性与 sleep 函数一起使用的最佳方式。

    【讨论】:

    • 是的,但我不知道会持续多久。在 Task.sleep 我需要设置时间
    • 但是你在 requestRepeatDelay 中有它,不是吗,因为这就是你今天使用的?此外,我不明白延迟的持续时间是问题的一部分。
    猜你喜欢
    • 1970-01-01
    • 2014-09-06
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多