两个网络请求完成执行第三个请求
来源:互联网 发布:层次数据库 编辑:程序博客网 时间:2024/05/16 15:59
一.gcd信号量控制
/创建信号量/
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
/创建全局并行/
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{
网络请求1 ^{
dispatch_semaphore_signal(semaphore);
}
});
dispatch_group_async(group, queue, ^{
网络请求2 ^{
dispatch_semaphore_signal(semaphore);
}
});
dispatch_group_notify(group, queue, ^{
/两个请求对应两次信号等待/
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
网络请求3
});
提示:信号量控制虽然好用,但是在复杂的项目中,多处用到信号量就需要考虑到各个信号量之间的干扰,导致线程堵塞,程序莫名停止,不会崩溃也找不到原因。
二. 1.定义1个int a值。完成一个网络请求,a的值 +1,
2.用KVO监测a的值>=2,执行网络请求3
三. dispatch_group_t serviceGroup = dispatch_group_create();
// 网络请求1
dispatch_group_enter(serviceGroup);
[self.configService startWithCompletion:^(ConfigResponse *results, NSError* error){
// Do something with the results
configError = error;
dispatch_group_leave(serviceGroup);
}];
// 网络请求2
dispatch_group_enter(serviceGroup);
[self.preferenceService startWithCompletion:^(PreferenceResponse *results, NSError* error){
// Do something with the results
preferenceError = error;
dispatch_group_leave(serviceGroup);
}];
dispatch_group_notify(serviceGroup,dispatch_get_main_queue(),^{
// Assess any errors
NSError *overallError = nil;
if (configError || preferenceError)
{
// Either make a new error or assign one of them to the overall error
overallError = configError ?: preferenceError;
}
// 网络请求3
completion(overallError);
});
- 两个网络请求完成执行第三个请求
- iOS 多个网络请求全部完成后再刷新
- 网络请求串行执行
- RxJava + Retrofit完成网络请求
- RxJava + Retrofit完成网络请求
- Retrofit+Rxjava完成网络请求
- iOS 多个网络请求并发执行的解决方案
- 第三篇 关于网络请求
- iOS-一个页面多个请求完成以后再执行其他操作
- Android】RxJava + Retrofit完成网络请求
- 【Android】RxJava + Retrofit完成网络请求
- 【Android】RxJava + Retrofit完成网络请求
- 通过 Moya+RxSwift+Argo 完成网络请求
- 【Android】RxJava + Retrofit完成网络请求
- okhttp 第三方 网络数据请求 异步get请求 和异步post请求 同步请求
- ASIHTTPRequest第三方网络请求详解
- 第三方网络请求的封装
- iOS第三方网络请求框架--AFNetworking
- iOS同步post请求
- Keras实现各类自编码器
- C语言预处理命令总结大全
- java实现文件下载(java均通用) --转载
- mongodb备份与恢复
- 两个网络请求完成执行第三个请求
- centos7 thinphp5 Nginx隐藏index.php和Pathinfo模式配置
- Apache2.4编译步骤
- Java用自定义的类型作为HashMap的key
- java compareTo() 用法注意点
- 转--使用PHP导入Excel和导出数据为Excel文件
- Bluetooth Low Energy 嗅探
- ajax传向前台的html代码里又有事件的时候,绑定事件失败解决方法
- Android内存泄漏检测利器:LeakCanary