NSOperation - групповые операции и ожидание, пока все они не будут завершены

У меня есть подкласс объекта NSOperation и NSOperationQueue. Мои операции выглядят одинаково, я добавляю все в OperationQueue и выполняю блок завершения после завершения каждой операции. Но некоторые операции являются членами одной бизнес-группы, и эта группа может одновременно выполняться в очереди. Мне нужно подождать, пока каждая группа не закончит и выполнить блок завершения после каждой группы. Но я не хочу блокировать группы или запускать одну за другой. Как я могу сделать этот вариант, используя NSOperation или с помощью других подходов.

1 ответ

Решение

Добавьте одну операцию, которая зависит от каждой из ваших операций, и дождитесь завершения всех операций

    NSOperationQueue* queue = [NSOperationQueue new];

NSOperation* finalOperation = [NSBlockOperation blockOperationWithBlock:^{
    NSLog(@"ALL IS DONE!");
}];

for (NSUInteger i = 0; i < 10; i++) {
    NSOperation* op = [NSBlockOperation blockOperationWithBlock:^{
            NSLog(@"%zd", i);
    }];
    [finalOperation addDependency:op];
    [queue addOperation:op];
}
 [queue addOperation:finalOperation];

Output: 
0
2
3
1
5
4
6
7
8
9
ALL IS DONE!
Другие вопросы по тегам