美文网首页
GCD处理多个网络请求都返回结果成功后,执行规定逻辑

GCD处理多个网络请求都返回结果成功后,执行规定逻辑

作者: 攻城狮GG | 来源:发表于2017-12-14 13:54 被阅读0次

由于工作需要,我们需要在多个网络请求成功后去执行相关逻辑,刚开始想到了调度组,但是网络请求返回结果又是在异步进行并且是耗时所以无法得到解决。所以就用到了信号。具体步棸如下。

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_group_t group = dispatch_group_create();

dispatch_semaphore_t sem = dispatch_semaphore_create(0);

//11111111111111

dispatch_group_async(group, queue, ^{

[JJHTTPClient getOrPostUrl:isCDNRequest?@"get":@"post" haveCacheString:isCDNRequest?cdnStr:str withParam:params withSuccessBlock:^(id data) {

第一个网络请求成功后逻辑处理

以下两条代码一定要注意,缺一不可。

NSLog(@"任务一");

dispatch_semaphore_signal(sem);

}

withFailedBlock:^(NSDictionary *dict)

{

}

withErrorBlock:^(NSString *message)

{

}];

});

//222222

dispatch_group_async(group, queue, ^{

[JJHTTPClient getOrPostUrl:isCDNRequest?@"get":@"post" haveCacheString:isCDNRequest?cdnStr:str withParam:params withSuccessBlock:^(id data) {

第二个网络请求成功后逻辑处理

以下两条代码一定要注意,缺一不可。

NSLog(@"任务二");

dispatch_semaphore_signal(sem);

}

withFailedBlock:^(NSDictionary *dict)

{

}

withErrorBlock:^(NSString *message)

{

}];

});

//33333333

dispatch_group_async(group, queue, ^{

[JJHTTPClient getOrPostUrl:isCDNRequest?@"get":@"post" haveCacheString:isCDNRequest?cdnStr:str withParam:params withSuccessBlock:^(id data) {

第三个网络请求成功后逻辑处理

以下两条代码一定要注意,缺一不可。

NSLog(@"任务三");

dispatch_semaphore_signal(sem);

}

withFailedBlock:^(NSDictionary *dict)

{

}

withErrorBlock:^(NSString *message)

{

}];

});

----------------------------------------------

//在分组的所有任务完成后触发

dispatch_group_notify(group, queue, ^{

注意有几个任务就加几个信号,提示DISPATCH_TIME_FOREVER是可以自己定义时间的,就是多长时间没有请求成功就执行该代码。

dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);

dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);

dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);

NSLog(@"任务请求完成");

});

相关文章

网友评论

      本文标题:GCD处理多个网络请求都返回结果成功后,执行规定逻辑

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