NSOperationQueue最大并发量、暂停、取消

当使用暂停、取消任务时,需要等到正在执行的任务执行完成后,才会执行这个动作。其中取消任务的动作不可逆,取消之后任务不能重新开启。具体代码如下:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    //当self.operationQueue.suspended 为YES时执行任务,为NO时暂停任务
    //每个任务都有执行状态,暂停的时候正在执行的任务执行完,才会暂停
    self.operationQueue.suspended = !self.operationQueue.suspended;
    
    //取消所有的任务,正在执行的任务执行完,才会执行这个动作,和暂停类似。该方法不可逆,取消后不能恢复执行
//    [self.operationQueue  cancelAllOperations];
}


//NSOperationQueue,最大并发数
- (void)operationQueueMaxConcurrentOperationCount
{
    //1:创建队列
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    /*
     默认是并发队列,如果最大并发数>1,并发
     如果最大并发数==1,串行
     系统默认的并发数是-1,所有任务全部并发执行
     */
    queue.maxConcurrentOperationCount = 1;
    //2:封装操作
    NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"1------%@",[NSThread currentThread]);
    }];
    NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"2------%@",[NSThread currentThread]);
    }];
    NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"3------%@",[NSThread currentThread]);
    }];
    NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"4------%@",[NSThread currentThread]);
    }];
    NSBlockOperation *op5 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"5------%@",[NSThread currentThread]);
    }];
    NSBlockOperation *op6 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"6------%@",[NSThread currentThread]);
    }];
    
    //3:把操作添加到队列
    [queue addOperation:op1];
    [queue addOperation:op2];
    [queue addOperation:op3];
    [queue addOperation:op4];
    [queue addOperation:op5];
    [queue addOperation:op6];
    self.operationQueue = queue;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 180,192评论 25 708
  • 小番茄。 又名千禧。黄色的叫圣女果,正宗的学名叫西红柿,俗称番茄。 由于农业的发展,各种转基因,杂交等的作用,使最...
    田田圈Tina阅读 1,244评论 0 3

友情链接更多精彩内容