allだとすべてのPromiseが同時に実行状態になり、100程のPromiseをallしたい場合リソースを大量食いするので並列度を抑えて逐次的に処理しつつ全部が終わったら次の処理をしたい。
SwiftTaskではallに渡すTaskを全てpause状態で作成しておいてon(success)でまだ実行されていないTaskをresumeして実現
Hydraでは同じ実装をPRして入っている https://github.com/malcommac/Hydra/blob/master/Sources/Hydra/Promise%2BAll.swift#L47
zipかcombineLatestで渡した全てのObservableのイベントが揃うまで待てる(Promise的all)
どちらにしても渡した全Observableはsubscribeされてしまうので、Observable.createのclosureはその段階で実行されてしまう。
OperationQueueを利用するスケジューラであるOperationQueueSchedulerを作成しzipのあとにsubscribeOnしてみたが全Observableが一気にsubscribeされてしまう事に変わりはなかった。
なのでcreateの中でスケジューラでのスケジュール実行させる事で逐次処理できた。
NOTE: Observable.createしたObservableをretryするとリトライできるがsubscribeは全部一気にされるのでキューには既に100まで埋まっている。onErrorしたObservableはsubscribeされなおすのでキューの最後になる点に注意。