У меня есть несколько асинхронных вызовов, которые я бы объединил в один вызов:
-(void) loadA:(ArrayBlock)completion failure(FailureBlock):failure;
-(void) loadB:(ArrayBlock)completion failure(FailureBlock):failure;
-(void) loadC:(ArrayBlock)completion failure(FailureBlock):failure;
Комбинированный метод, в котором используются приведенные выше вызовы:
- (void) loadAll:(ObjectBlock)completion;
Блок завершения содержит объект с тремя массивами с именем array[A-C]
. Если какой-либо из дочерних вызовов завершается неудачно, соответствующий массив в объекте просто устанавливается в ноль.
Вместо того, чтобы вкладывать эти три блока и вызывать следующий при сбое или завершение предыдущего (это становится действительно беспорядочным) - я хочу сделать что-то вроде следующего, используя GCD:
- Добавить все звонки в очередь
- Подождите, пока все вызовы не завершатся (был вызван блок успеха или сбоя)
- Объедините все результаты из блоков завершения и вызовите блок завершения метода
loadAll
.
Я знаю, что это возможно в GCD с синхронными вызовами, но я не вижу, как добиться этого с моими тремя асинхронными «дочерними вызовами».