教你如何取消GCD任务

教你怎么样撤除GCD职责,裁撤GCD任务

      GCD 是一种极其方便的利用多线程的方法。通过接纳GCD,大家得以在保障尽量轻巧的语法的前提下进行灵活的八线程编制程序。在
“复杂必死”
的多线程编制程序中,保持不难就是防止不当的规范。但是,GCD不像NSOperation那样能够调用
-(void)cancel
撤废一个操作的施行(注意这里的撤销只是指向未执行的天职设置finished =
YES,纵然那一个操作已经在实施了,那么大家只可以等其操作完毕。当大家调用cancel方法的时候,他只是将isCancelled设置为YES)。那大家想收回GCD职责如何做?难道真的敬敏不谢了啊?

     NO,怎么恐怕那样轻便就放任!下面作者将为大家介绍怎么样促成打消GCD职分。

      GCD 是一种极度便于的使用八线程的措施。通过应用
GCD,大家得以在保证尽量轻便的语法的前提下开始展览灵活的四线程编制程序。在
“复杂必死”
的四线程编程中,保持轻松正是防止不当的轨范。可是,GCD不像NSOperation这样能够调用
-(void)cancel
撤除多个操作的施行(注意这里的吊销只是针对未实行的职务设置finished =
YES,要是那一个操作已经在实践了,那么大家只好等其操作实现。当大家调用cancel方法的时候,他只是将isCancelled安装为YES)。那我们想收回GCD职责如何是好?难道真的敬敏不谢了吧?

      GCD 是一种卓殊便利的应用二十四线程的方法。通过利用
GCD,大家可以在确定保障尽量轻便的语法的前提下打开灵活的四线程编制程序。在
“复杂必死”
的八线程编制程序中,保持简单正是制止不当的样子。不过,GCD不像NSOperation那样能够调用
-(void)cancel
裁撤贰个操作的施行(注意这里的吊销只是指向未推行的职分设置finished =
YES,假设那一个操作已经在实行了,那么大家只好等其操作完结。当大家调用cancel方法的时候,他只是将isCancelled安装为YES)。那我们想收回GCD任务如何是好?难道真的无能为力了吧?

     第一种:dispatch_block_cancel

   
 iOS8后头可以调用dispatch_block_cancel来撤消(须要小心必须用dispatch_block_create创建dispatch_block_t) 

     代码示例:

- (void)gcdBlockCancel{

    dispatch_queue_t queue = dispatch_queue_create("com.gcdtest.www", DISPATCH_QUEUE_CONCURRENT);

    dispatch_block_t block1 = dispatch_block_create(0, ^{
        sleep(5);
        NSLog(@"block1 %@",[NSThread currentThread]);
    });

    dispatch_block_t block2 = dispatch_block_create(0, ^{
        NSLog(@"block2 %@",[NSThread currentThread]);
    });

    dispatch_block_t block3 = dispatch_block_create(0, ^{
        NSLog(@"block3 %@",[NSThread currentThread]);
    });

    dispatch_async(queue, block1);
    dispatch_async(queue, block2);
    dispatch_block_cancel(block3);
}

     打字与印刷结果:

2017-07-08 13:59:39.935 beck.wang[2796:284866] block2 <NSThread: 0x6180000758c0>{number = 3, name = (null)}
2017-07-08 13:59:44.940 beck.wang[2796:284889] block1 <NSThread: 0x618000074f80>{number = 4, name = (null)}

     
同样的,dispatch_block_cancel也只可以撤废尚未推行的任务,对正值实践的职分不起效率。

     NO,怎么可能那样轻易就甩掉!上边作者将为大家介绍如何完毕撤除GCD职务。

     NO,怎么或许那样轻松就放任!下边小编将为大家介绍怎样达成撤废GCD义务。