使用Combine框架提供的merge操作符,可以避免并行执行Combine Publishers时出现的竞态条件问题。示例代码如下:
let publisher1 = URLSession.shared.dataTaskPublisher(for: url1).map { $0.data } let publisher2 = URLSession.shared.dataTaskPublisher(for: url2).map { $0.data }
let merged = Publishers.Merge(publisher1, publisher2)
let subscription = merged.sink { data in print("Received data: (data)") } failure: { error in print("Error:", error) } completion: { print("Data stream completed") }
// 可以在sink函数中接收到两个url的数据流合并后的数据。