也许我让NSOperation
在非并发作业中扮演错误的角色。我的要求是,我想做很多异步工作,但我希望它们按顺序完成。当task1在异步回调之后完成时,task2现在可以开始工作了。我将所有任务都设为NSOperation
。但是,NSOperation
大部分时间用于多线程编程。我的选择是错的。但它提醒我在这种情况下更多地考虑NSOperation
,我们无法在同步块中手动管理isFinished
和isExecute
,因为该操作已在非-concurrent nsoperation,这意味着我无法使用强大的操作队列来自动管理任务。任何想法?感谢您的回答..
使用代码进行编辑:
-(void)main {
[super main];
self.isOperationExcuting = YES;
self.isOperationFinished = NO;
WEAKSELF
[self query:^(NSArray *array, NSError *error) {
//I set my custom property, but it do not cause my NSOperation to be finished
weakSelf.isOperationFinished = YES;
weakSelf.isOperationExcuting = NO;
}];
}
-(void)query:(void (^)(NSArray *array, NSError *error))block {
BmobQuery *query = [BmobQuery queryWithClassName:@"Room"];
[query findObjectsInBackgroundWithBlock:block];
}
-(BOOL)isFinished {
return self.isOperationFinished;
}
- (BOOL)isExecuting {
return self.isOperationExcuting;
}
- (void)start {
[super start];
NSLog(@"start");
}
- (void)cancel {
[super cancel];
NSLog(@"cancel");
}
答案 0 :(得分:0)
只需将maxConcurrentOperationCount
设置为1
即可将所有已添加的操作设为序列。
NSOperationQueue* queue = [[ NSOperationQueue alloc ] init];
queue.maxConcurrentOperationCount = 1;
[queue addOperation:operation1];
[queue addOperation:operation2];
[queue addOperation:operation3];
NSOperationQueue类规定了一组的执行 NSOperation对象。添加到队列后,进行操作 保留在该队列中,直到明确取消或完成 执行任务。