iOS网络任务顺序发起 demo

2018-12-21  本文已影响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] ----全部请求完毕---
--------------------- 


上一篇 下一篇

猜你喜欢

热点阅读