如何在非并发自定义nsoperation中执行异步任务

时间:2015-11-09 09:22:20

标签: ios iphone

也许我让NSOperation在非并发作业中扮演错误的角色。我的要求是,我想做很多异步工作,但我希望它们按顺序完成。当task1在异步回调之后完成时,task2现在可以开始工作了。我将所有任务都设为NSOperation。但是,NSOperation大部分时间用于多线程编程。我的选择是错的。但它提醒我在这种情况下更多地考虑NSOperation,我们无法在同步块中手动管理isFinishedisExecute,因为该操作已在非-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");
}

1 个答案:

答案 0 :(得分:0)

只需将maxConcurrentOperationCount设置为1即可将所有已添加的操作设为序列。

NSOperationQueue* queue = [[ NSOperationQueue alloc ] init];
queue.maxConcurrentOperationCount = 1;

[queue addOperation:operation1];
[queue addOperation:operation2];
[queue addOperation:operation3];

NSOperationQueue

  

NSOperationQueue类规定了一组的执行   NSOperation对象。添加到队列后,进行操作   保留在该队列中,直到明确取消或完成   执行任务。