【发布时间】:2017-10-03 07:30:07
【问题描述】:
给定这样的服务类:
class Service {
let networkService = NetworkService()
func handleJobA(input: String) -> Observable<ResultA> {
return networkService
.computeA(input)
.map { $0.a }
}
}
当我像这样从调用方使用它时:
let service = Service()
Observable
.from(["Hello", "World"])
.flatMap {
service.handleJobA($0)
}
.subscribe()
然后这将同时向service 发送多个请求。我希望流等到每个请求完成。这是可以使用merge 运算符实现的。
Observable
.from(["Hello", "World"])
.flatMap {
Observable.just(
service.handleJobA($0)
)
}
.merge(maxConcurrent: 1)
.subscribe()
到目前为止,一切都很好 - 该服务不会同时执行多个 handleJobA 任务。
但是,并发是一个服务细节,调用者不应该关心它。事实上,服务在稍后阶段可能会决定允许不同的并发值。
其次,当我添加一个新方法handleJobB时,它不能与作业A同时处于活动状态,反之亦然。
所以我的问题是:
- 如何将 maxConcurrency 限制为可观察的 handleJobA 作为实现细节?
- 哪种 RxSwift 模式允许对任何服务方法进行限制?
【问题讨论】:
标签: swift reactive-programming rx-swift