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!