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] ----全部请求完毕---
---------------------
- (无序)并行请求 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] ----全部请求完毕---
---------------------