美文网首页
iOS网络任务顺序发起 demo

iOS网络任务顺序发起 demo

作者: 叩首问路梦码为生 | 来源:发表于2018-12-21 10:44 被阅读15次

//  dispatch_group_wait   顺序等待任务发起
-(void) serialByGroupWait {
    
    NSString *userId = [NSString stringWithFormat:@"%@",[AppData share].userid];
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self.imageIdArray options:NSJSONWritingPrettyPrinted error:nil];
    NSString *jsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        dispatch_group_t group = dispatch_group_create();
        [self.rspModel.data.orderDetails enumerateObjectsUsingBlock:^(RefundSmallmodel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop){
            if (obj.isSelect)
            {
                RefundSmallmodel *smallModel = self.rspModel.data.orderDetails[idx];
                NSDictionary *params = [NSDictionary dictionary];
                params = @{@"userid":userId,
                           @"orderid":_orderID,
                           @"explain":self.descriptionStr,
                           @"imgs":jsonStr,
                           @"status":@"0",
                           @"productid":smallModel.productid,
                           @"shopid":smallModel.shopid,
                           @"num":smallModel.num,
                           @"extra_info":smallModel.extra_info,
                           };
                NSString *url = [NSString stringWithFormat:@"%@",refundUrl];
                NSString *token = [[NSUserDefaults standardUserDefaults] valueForKey:TOKEN];
                NSString *aa = [NSString stringWithFormat:@"Bearer %@",token];
                NSDictionary *headerDic = @{@"userid":userId,@"Authorization":aa};
                // 进入线程组
                 dispatch_group_enter(group);
                 NSLog(@"-----------  数据index-%ld 开始上传 ",idx);
                [NTNetUtil sendRequestWithUrl:url requestHeader:headerDic method:requestPOST parameters:params block:^(NTHttpRequest *networkRequest, NSError *error) {
                    if (error == nil) {
                        NSDictionary *responseDic = (NSDictionary *)networkRequest.responseData;
                        NSString *r = [NSString stringWithFormat:@"%@",[responseDic objectForKey:@"success"]];
                        if ([r isEqualToString:@"1"]) {
                            NSLog(@"-----------  数据index-%ld 上传OK了 ",idx);
                        }
                    }else {
                        
                    }
                    // 离开线程组
                    dispatch_group_leave(group);
                }];
                
                // 卡住子线程
                 dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
            }
        }];
        dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{
            dispatch_async(dispatch_get_main_queue(), ^{
                _saveBtn.userInteractionEnabled=YES;
                NSLog(@"-----------  数据上传完成!");
                [[MessShowView share] showWithMess:@"申请售后成功"];
                [self.navigationController popToRootViewControllerAnimated:YES];
            });
           
        });
    });
}

 
任务1发起 --  任务1完成     ---任务 2 发起 ----任务 2 完成 ----

信号量dispatch_semaphore_wait 顺序等待任务发起

 - (void)test {
    dispatch_group_t group = dispatch_group_create();
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

    NSLog(@"请求开始");
    dispatch_group_async(group, queue, ^{
        for (int i = 0; i < 4; i++) {
            NSLog(@"----------开始请求 i = %i", i);
            //随便请求都行
            [BYNetPort requestFileSettingsSuccess:^(id responseObject) {
                NSLog(@"--------成功 i = %i",i);
                dispatch_semaphore_signal(semaphore);
            } failure:^(NSError *error) {
                NSLog(@"--------成功 i = %i",i);
                dispatch_semaphore_signal(semaphore);
            }];
            dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
        }
    });
    dispatch_group_notify(group, queue, ^{
        NSLog(@"----全部请求完毕---");
    });
}

2018-09-07 15:37:46.567017+0800 kantan[32591:12521747] 请求开始
2018-09-07 15:37:46.567213+0800 kantan[32591:12521836] ----------开始请求 i = 0
2018-09-07 15:37:47.123672+0800 kantan[32591:12521747] --------成功 i = 0
2018-09-07 15:37:47.123853+0800 kantan[32591:12521836] ----------开始请求 i = 1
2018-09-07 15:37:47.622304+0800 kantan[32591:12521747] --------成功 i = 1
2018-09-07 15:37:47.622575+0800 kantan[32591:12521836] ----------开始请求 i = 2
2018-09-07 15:37:48.648025+0800 kantan[32591:12521747] --------成功 i = 2
2018-09-07 15:37:48.648289+0800 kantan[32591:12521836] ----------开始请求 i = 3
2018-09-07 15:37:49.216007+0800 kantan[32591:12521747] --------成功 i = 3
2018-09-07 15:37:49.216195+0800 kantan[32591:12521836] ----全部请求完毕---
--------------------- 


  1. (无序)并行请求 group leave 和 enter ##
    code:

- (void)test {
    dispatch_group_t group = dispatch_group_create();
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    NSLog(@"请求开始");
    dispatch_group_async(group, queue, ^{
        for (int i = 0; i < 4; i++) {
            NSLog(@"----------开始请求 i = %i", i);
            //随便请求都行
            [BYNetPort requestFileSettingsSuccess:^(id responseObject) {
                NSLog(@"--------成功 i = %i",i);
                dispatch_group_leave(group);
            } failure:^(NSError *error) {
                NSLog(@"--------成功 i = %i",i);
                dispatch_group_leave(group);
            }];
            dispatch_group_enter(group);
        }
    });
    dispatch_group_notify(group, queue, ^{
        NSLog(@"----全部请求完毕---");
    });
}
--------------------- 
以下是输出结果:

2018-09-07 15:43:24.538455+0800 kantan[32746:12527236] 请求开始
2018-09-07 15:43:24.538653+0800 kantan[32746:12527354] ----------开始请求 i = 0
2018-09-07 15:43:24.548369+0800 kantan[32746:12527354] ----------开始请求 i = 1
2018-09-07 15:43:24.549534+0800 kantan[32746:12527354] ----------开始请求 i = 2
2018-09-07 15:43:24.550806+0800 kantan[32746:12527354] ----------开始请求 i = 3
2018-09-07 15:43:25.064171+0800 kantan[32746:12527236] --------成功 i = 0
2018-09-07 15:43:25.145752+0800 kantan[32746:12527236] --------成功 i = 2
2018-09-07 15:43:25.146124+0800 kantan[32746:12527236] --------成功 i = 1
2018-09-07 15:43:25.155443+0800 kantan[32746:12527236] --------成功 i = 3
2018-09-07 15:43:25.155616+0800 kantan[32746:12527348] ----全部请求完毕---
--------------------- 


相关文章

  • iOS网络任务顺序发起 demo

    信号量dispatch_semaphore_wait 顺序等待任务发起 (无序)并行请求 group leave...

  • GCD 多个网络请求/任务并发或顺序执行

    GCD的使用:多个网络请求/任务并发或顺序执行,所有的网络请求/任务都结束之后再执行数据操作。 Demo地址:De...

  • iOS下网络请求顺序执行的方案比较

    实现网络请求顺序执行的几种方案及优缺点比较 网络请求顺序执行的具体实现 实现网络请求顺序执行的方案 回调中发起下次...

  • iOS下网络请求顺序执行的方案比较

    实现网络请求顺序执行的几种方案及优缺点比较 网络请求顺序执行的具体实现 实现网络请求顺序执行的方案 回调中发起下次...

  • 文章汇总

    ios iOS 网络篇 网络基础总结 支付宝集成 iOS支付宝支付集成 - demo例子集 - 博客园 理解 iO...

  • iOS 直播间送礼物逻辑

    iOS 直播间送礼物 先贴demo地址:GitHub demo基本实现了主流直播间礼物的逻辑 按照队列顺序显示用...

  • iOS NSURLSession的使用

    使用NSURLSession发起的网络请求都当成任务,分为三种任务: NSURLSessionDataTask: ...

  • iOS 网络执行顺序

    概述 闲话少说直接开干! 在开发的过程中,相信你会遇到这2个场景,有四个网络需要执行,分别命名为网络A, 网络B...

  • iOS-AFN

    博文参考iOS开发之网络层探索iOS安全策略之HTTPS Github Demo AFN头文件信息

  • iOS iPad开发~demo

    iOS iPad开发~demo iOS iPad开发~demo

网友评论

      本文标题:iOS网络任务顺序发起 demo

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