GCD中的取消任务

1.

现在在iOS8之后,提交到gcd队列中的dispatch block也可取消了,只需要简单的调用dispatch_block_cancel传入想要取消的block即可(需要注意必须用dispatch_block_create创建dispatch_block_t同样的,dispatch_block_cancel也只能取消尚未执行的任务,对正在执行的任务不起作用


dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_SERIAL);
dispatch_block_t block1 = dispatch_block_create(0, ^{
    NSLog(@"block1 begin");
    [NSThread sleepForTimeInterval:3];
    NSLog(@"block1 end");
});

dispatch_block_t block2 = dispatch_block_create(0, ^{
    NSLog(@"block2 ");
});

dispatch_async(queue, block1);
dispatch_async(queue, block2);
//取消执行block2
dispatch_block_cancel(block2);

可以看到如下的执行结果,block2不再执行了。

GCDTests[17271:902981] block1 begin
GCDTests[17271:902981] block1 end

2.借助使用外部变量增加已经取消的状态。

发布了81 篇原创文章 · 获赞 68 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/li198847/article/details/102673490
今日推荐