美文网首页iOS开发日常
iOS - 网络请求并发和同步

iOS - 网络请求并发和同步

作者: feedback1991 | 来源:发表于2020-04-02 14:49 被阅读0次

有时我们需要将多个网络请求并行或者串行执行完后回到主线程执行某些操作,这时候我们可以借助dispatch_semaphore来实现这个功能,下面模拟三个网络请求,实际中NSUrlSession中的方法本身就是异步的,所以不用开辟异步线程。

    __block NSString *string1;
    __block NSString *string2;
    __block NSString *string3;
    
//    串行
//    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
//    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//        [NSThread sleepForTimeInterval:8];
//        string1 = @"任务1";
//        NSLog(@"任务1-start");
//        dispatch_semaphore_signal(semaphore);
//    });
//    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
//    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//        [NSThread sleepForTimeInterval:5];
//        string2 = @"任务2";
//        NSLog(@"任务2-start");
//        dispatch_semaphore_signal(semaphore);
//    });
//    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
//    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//        [NSThread sleepForTimeInterval:5];
//        string3 = @"任务3";
//        NSLog(@"任务3-start");
//        dispatch_semaphore_signal(semaphore);
//    });
//    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
//    NSLog(@"%@-%@-%@",string1,string2,string3);
    
//    并行
    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        [NSThread sleepForTimeInterval:8];
        string1 = @"任务1";
        NSLog(@"任务1-start");
        dispatch_semaphore_signal(semaphore);
    });
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        [NSThread sleepForTimeInterval:5];
        string2 = @"任务2";
        NSLog(@"任务2-start");
        dispatch_semaphore_signal(semaphore);
    });
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        [NSThread sleepForTimeInterval:5];
        string3 = @"任务3";
        NSLog(@"任务3-start");
        dispatch_semaphore_signal(semaphore);
    });
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    NSLog(@"%@-%@-%@",string1,string2,string3);

相关文章

  • iOS - 网络请求并发和同步

    有时我们需要将多个网络请求并行或者串行执行完后回到主线程执行某些操作,这时候我们可以借助dispatch_sema...

  • 关于多个网络请求同步的一些总结

    等待多个并发请求同步回调 例如同时发起网络请求A,网络请求B,网络请求C,需等待A,B,C都返回了才进行回调。曾经...

  • IOS 网络并发请求

    现在有一个需求:某个页面中的数据是通过三个接口给出的,现在需要三个接口中的数据全部返回后再一起展示全部数据。需求分...

  • 网络数据请求自身心得

    今天来说说关于iOS开发过程中的网络数据请求。 现在常用的网络数据请求常见的有四种方式:同步GET,同步POST,...

  • ios 开发中的网络数据请求

    今天来说说关于iOS开发过程中的网络数据请求。现在常用的网络数据请求常见的有四种方式:同步GET,同步POST,异...

  • GCD之网络请求并发同步

    今天项目碰到一个网络请求的多线程问题, 为了解决这个问题,翻阅大量文章,最终得到答案,仅以此记录,方便后期回顾和日...

  • 网络协议

    网络请求分为4类:GET同步请求GET异步请求POST同步请求POST异步请求 同步网络请求步骤: 1:创建网址字...

  • iOS 【GCD实战之多个网络请求的并发】

    摘录:iOS开发网络篇:GCD实战之多个网络请求的并发 第二种 通过请求数量计数 dispatch_group +...

  • iOS多个网络请求并发

    笔者前不久终于发布了自己的APP《印记(官方版)》,希望读者能前往App Store下载《印记(官方版)》支持一下...

  • Retrofit 与Okhttp

    OKhttp是个高效的网络求情框架,支持多种网络请求配置,支持同步和异步两种请求方法(同步请求通过call.exe...

网友评论

    本文标题:iOS - 网络请求并发和同步

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