美文网首页程序员iOS_GCD
dispatch_group 处理异步任务的同步

dispatch_group 处理异步任务的同步

作者: 朝雨晚风 | 来源:发表于2018-05-28 16:34 被阅读30次

(一)、多个网络请求的同步问题

解决1:通过添加标识来判断请求是否全部结束
用一个finishedCount变量记录完成请求的个数,然后在单个网络请求结束回调的时候判断当前完成的网络请求个数是否和总的网络请求个数相等,如果相等则说明请求结束。对于批量网络请求失败的处理是,只要一个失败就立即停止请求,调用失败回调:
解决2:dispatch_group + 信号量。处理异步任务的同步,当异步任务开始前调用dispatch_group_enter异步任务结束后调用dispatch_group_leve;当计数为0时会调用dispatch_group_notify。

- (void)groupSync
{
    dispatch_group_t group = dispatch_group_create();
    dispatch_group_enter(group);
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
       
        sleep(5);
        NSLog(@"任务一完成");
        dispatch_group_leave(group);
    });
    dispatch_group_enter(group);
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        
        sleep(8);
        NSLog(@"任务二完成");
        dispatch_group_leave(group);
    });
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        // 回到主线程刷新UI
        NSLog(@"任务完成");

    });
}

相关文章

  • dispatch_group 处理异步任务的同步

    (一)、多个网络请求的同步问题 解决1:通过添加标识来判断请求是否全部结束用一个finishedCount变量记录...

  • iOS多线程

    GCD 同步/异步 和 串行/ 并发 dispatch_barrier_async dispatch_group ...

  • iOS开发多线程(GCD)

    相关概念 队列:用于储存任务 线程:处理任务的单元 sync:同步处理(立即处理) async:异步处理(稍后处理...

  • 多线程相关

    1.GCD 同步/异步和串行/并发 dispatch_barrier_async dispatch_group (...

  • 同步或异步异常处理

    同步或异步异常处理 同步读取异常处理 异步读取文件异常处理

  • GCD多线程dispatch_group当有异步任务执行要使用d

    打印输出 ps:dispatch_group队列里面的任务还是异步执行的

  • JS事件循环机制

    1. 同步任务与异步任务 所有的任务可以分为同步任务和异步任务。 同步任务就是立即执行的任务,同步任务一般会直接进...

  • 异步编程(1) Generator

    异步的概念 一般同步的程序是请求文件-等待文件-处理文件,而异步则是在等待文件的阶段可以处理其他任务,这便是异步 ...

  • dispatch_group(队列组)处理异步任务

    dispatch_group中都是同步事件情况例如任务3需要在任务1和任务2执行结束以后(任务1.2是并发执行的)...

  • 多线程系列文章

    GCD基础篇 - 同步、异步,并发、并行的理解 GCD中级篇 - dispatch_group的理解及使用 dis...

网友评论

    本文标题:dispatch_group 处理异步任务的同步

    本文链接:https://www.haomeiwen.com/subject/eiygjftx.html