如何使用调度组同时开始加载?

杰克里斯

为了更快地加载,我想使用调度组,但是在这种情况下该怎么做?

同时,我想开始加载executionRepository和streakRepository。

private func loadDailyWorkout(completion: @escaping ((DailyWorkout) -> Void)) {
    workoutRepository.load { [weak self] (result) in
        switch result {
        case .success(let list):
            if list.isEmpty {
                self?.shouldShowWorkoutUnlockedScreen = true
            }
            self?.streakRepository.load { (result) in
                switch result {
                case .success(let streak):
                    let workout = DailyWorkout(streak: streak, tricks: list)
                    completion(workout)
                case .failure:
                    let workout = DailyWorkout(streak: Streak.initial, tricks: list)
                    completion(workout)
                }
            }
        default:
            completion(DailyWorkout(streak: Streak.initial, tricks: []))
        }
    }
}
马特

这是一个草图:

private func loadDailyWorkout(completion: @escaping ((DailyWorkout) -> Void)) {
    myBackgroundQueue.async {
        let group = DispatchGroup()
        var streak = // Optional of the right type, initially nil
        var list = // Optional of the right type, initially nil
        group.enter()
        workoutRepository.load { result in {
            // do stuff; set list
            group.leave()
        }
        group.enter()
        streakRepository.load { result in
            // do stuff; set streak
            group.leave()
        }
        group.notify(queue: .main) { 
            // can see streak and list
            // so now go ahead and do your callback
        }
    }
}

这两个load命令是同时执行的,但是notify直到两个命令都完成后,我们才继续执行()。

请注意,我首先将我们放在后台队列中,因为我们不能在主队列上“等待”。在您的情况下,这可能不是必需的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用调度组时如何使公共资源线程安全?

覆盖dask调度程序以同时在多个worker上加载数据

如何防止调度组不崩溃?

如何在具有异步功能Swift的循环中使用调度组?

类初始化时,如何使用调度组异步等待Firebase回调?

您如何使用调度组来等待调用依赖于不同数据的多个函数?

如何为不同的调度程序开始时间设计dag

使用 Kendo 调度程序资源分组时查找插槽的组

何时使用信号量代替调度组?

我可以不在循环中使用调度组吗?

使用调度组时,异步功能需要很长时间

如何使用不同的自动调度程序调度管道?

如何使用 Heroku 调度程序调度 PostgreSql 过程?

同时使用组和个人权限

如何使用 Tkinter 在 python 中的不同时间显示不同的单选按钮组?

调度组串行队列

调度组错误

调度组等待超时

如何在Flutter中开始加载主题

如何在具有自动加载功能的项目中开始使用composer?

在JavaScript中,如何等待动态注入的脚本加载后才开始使用它们?

如何使用Flutter和sqflite从文件开始在应用程序上加载数据?

如何在开始使用 requests.get() 下载之前加载完整的网页?

如何让秒表在页面加载时自动启动?不使用开始按钮

如何同时使用Firefox

要使用加载器小部件,如何通过异步firebase(可观察)请求获得加载开始/结束事件?

如何计算加载URL的延迟并使用VBA重新开始加载行中的下一个URL

如何使用pytorch同时迭代两个数据加载器?

如何使用默认布局,同时将路由定义保留在各自的预加载模块中