美文网首页
GCD实现异步任务---赵永洪笔(p小姐和z先森的故事)

GCD实现异步任务---赵永洪笔(p小姐和z先森的故事)

作者: 赵永洪 | 来源:发表于2018-08-31 20:48 被阅读13次

有时候我们会有这种需求:为了执行下载任务,开启了多个异步任务,需要在在这些异步任务都完成之后执行接下来的操作。这个时候,就需要用到异步任务的同步。 

iOS中GCD为我们提供了实现方式,就我所知有以下两种,如果各位大神还有其他实现方式还请赐教: 


一、dispatch_group实现

//创建一个全局队列,优先级设置为默认dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);//创建异步任务组,接下来将多个异步任务添加到这个任务组中dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group, queue, ^{

    // 异步任务1});

dispatch_group_async(group, queue, ^{

    // 异步任务2

});// 等待添加到group中的多个异步任务执行完毕后执行一些操作,有两种方式// 方式1(不推荐,会卡住当前线程)

dispatch_group_wait(group, DISPATCH_TIME_FOREVER);// 方式2(推荐,意思是当任务组中任务都完成会给系统发送一个通知,然后进行其他操作)dispatch_group_notify(group, mainQueue, ^{

    // 任务完成后,在主队列中做一些操作

});


二、dispatch_barrier_async实现 

dispatch_barrier_async的作用用一个词概括就是“承上启下”。它会等待在它之前的异步任务先执行,同时它之后的任务也需要等待它执行完成。基于这种特性,可以实现多个异步任务的同步操作。

dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_CONCURRENT);

dispatch_async(queue, ^{

    // 任务1});

dispatch_async(queue, ^{

    // 任务2});

dispatch_async(queue, ^{

    // 任务3});

dispatch_barrier_async(queue, ^{

    // 任务4});

dispatch_async(queue, ^{

    // 任务5});

dispatch_async(queue, ^{

    // 任务6});

在这段代码中,任务4要等待任务1、2、3的完成,任务5、6等待任务4的完成。

相关文章

  • GCD实现异步任务---赵永洪笔(p小姐和z先森的故事)

    有时候我们会有这种需求:为了执行下载任务,开启了多个异步任务,需要在在这些异步任务都完成之后执行接下来的操作。这个...

  • ERROR ITMS-90475:(p小姐和z先森的故事)

    ERROR ITMS-90475: "Invalid Bundle. Your app supports Mult...

  • 1.GCD学习之路

    GCD(Grand Central Dispatch) 1. 什么是GCD GCD实现了异步执行任务。开发者只需将...

  • 06进阶之路-多线程管理

    1. GCD相关 学习链接 GCD 简介 (多核编程管理线程) GCD 任务和队列(同步和异步任务 并发和串行队列...

  • OC 线程笔记

    GCD: 创建任务,添加到队列,GCD自动分发任务 同步/异步同步任务,异步任务的区别: 线程是否要等待任务结束,...

  • Objective-C高级编程:iOS与OS X多线程和内存管理

    1 GCD 概要 1.1 什么是 GCD GCD 是异步执行任务的技术之一。实现了极为复杂繁琐的多线程编程。 在导...

  • GCD的简单使用

    一. GCD基本知识 两个核心概念 队列和任务 同步函数和异步函数 二. GCD基本使用 异步函数+并发队列 : ...

  • GCD

    GCD的底层实现 基本理解 重点 并发:同步的话,任务按顺序执行。异步:真正的并发。 同步和异步:能不能开辟一个线...

  • GCD实现等待多个异步任务完成

    开发过程中可能需要实现多个异步任务完成后再执行下一步任务,GCD实现如下:

  • iOS之GCD学习心得

    1.GCD简介 gcd有两大概念:任务和队列(1) 任务:同步任务和异步任务。同步任务:不会开辟线程,在当前线程执...

网友评论

      本文标题:GCD实现异步任务---赵永洪笔(p小姐和z先森的故事)

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