我正在寻找允许同时处理2个线程(NSOperations)的模式,并且只有在两个线程都完成后才返回。为了使这一点复杂化,我需要这些双重操作的队列。
所以,我的想法是让NSOperation包含一个NSOperationQueue来处理两者。然后NSOperation队列将同时执行两个队列,当队列为空时提醒我,我们可以继续前进。
寻找有关这方面的想法,或者更好的方法来完成上述任务/陷阱。
提前致谢!
罗布
答案 0 :(得分:1)
您可以使用NSOperation
依赖支持来解决此问题。基本上,您创建第三个操作,运行您在前两个操作完成时要运行的代码,然后将前两个操作作为依赖项添加到第三个操作,并将它们全部添加到队列中:
NSOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"op1!");
}];
NSOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"op2!");
}];
NSOperation *completionOp = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"op1 and op2 are complete!");
}];
[completionOp addDependency:op1];
[completionOp addDependency:op2];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:completionOp];
[queue addOperation:op1];
[queue addOperation:op2];
哪个输出:
op1!
op2!
op1 and op2 are complete!
请注意,即使首先将completionBlock
添加到队列中,由于它在op1
和op2
上的依赖关系,它也会最后运行。