博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
嵌套的异步回调
阅读量:5810 次
发布时间:2019-06-18

本文共 1177 字,大约阅读时间需要 3 分钟。

今天被一个问题纠结了2个小时。一開始失败的代码大概是这种:

dispatch_group_t group = dispatch_group_create();                    while([rs next]){    dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{                                    [httpHelper getSecure:url completionHandler:^(NSDictionary* dict){            // 子任务                                       }];    });}                    dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{    // 子任务所有完毕后。才运行                        });
本意是调用GCD的group API。处理完每一个http请求的响应之后。才运行最后的总任务。可是因为httpHelper的getSecure:completionHandler:方法本身也有一个异步回调。所以上面的代码失效了

或者换一种写法。把dispatch_group_async写到getSecure的callback里面,也不行

最后最终找到一个救命帖:

应该写成这样:

dispatch_group_t group = dispatch_group_create();                    while([rs next]){    dispatch_group_enter(group);    dispatch_async(dispatch_get_global_queue(0, 0), ^{                                    [httpHelper getSecure:url completionHandler:^(NSDictionary* dict){            // 子任务            dispatch_group_leave(group);                             }];    });}                    dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{    // 子任务所有完毕后。才运行                        });

转载地址:http://gecbx.baihongyu.com/

你可能感兴趣的文章
白话算法(7) 生成全排列的几种思路(二) 康托展开
查看>>
d3 v4实现饼状图,折线标注
查看>>
微软的云策略
查看>>
Valid Parentheses
查看>>
【ES6】数值的扩展
查看>>
性能测试之稳定性测试
查看>>
ES6的 Iterator 遍历器
查看>>
2019届高二(下)半期考试题(文科)
查看>>
【REDO】删除REDO LOG重做日志组后需要手工删除对应的日志文件(转)
查看>>
nginx 301跳转到带www域名方法rewrite(转)
查看>>
AIX 配置vncserver
查看>>
windows下Python 3.x图形图像处理库PIL的安装
查看>>
【IL】IL生成exe的方法
查看>>
network
查看>>
SettingsNotePad++
查看>>
centos7安装cacti-1.0
查看>>
3个概念,入门 Vue 组件开发
查看>>
没有JS的前端:体积更小、速度更快!
查看>>
数据指标/表现度量系统(Performance Measurement System)综述
查看>>
GitHub宣布推出Electron 1.0和Devtron,并将提供无限制的私有代码库
查看>>