【发布时间】:2023-02-02 23:19:38
【问题描述】:
我正在尝试使用两个具有不同返回类型的不同发布者从两个不同端点加载数据。当两个请求都完成时,我需要更新 UI,但是两个请求也可能会失败,所以 Zip 不能解决问题。通常我会使用 DispatchGroup 来完成此操作,但我还没有弄清楚如何使用 Combine 来完成此操作。有没有办法将 DispatchGroup 与 Combine 一起使用?
let dispatchGroup: DispatchGroup = .init()
let networkQueue: DispatchQueue = .init(label: "network", cos: .userInitiated)
dispatchGroup.notify { print("work all done!" }
publisher
.receive(on: networkQueue, options: .init(group: dispatchGroup)
.sink { ... }
.receiveValue { ... }
.store(in: &cancellables)
publisher2
.receive(on: networkQueue, options: .init(group: dispatchGroup)
.sink { ... }
.receiveValue { ... }
.store(in: &cancellables)
立即执行通知。这不是正确的做法吗?
【问题讨论】:
-
当您调用
notify时,队列中没有工作,因此该块会立即执行。尝试先将一些工作放入队列,然后调用notify。