AFNetworking 3.0 队列 多任务
写在前面:
项目需求:订单,分多个子订单上传,所有子订单上传完毕后,发送总订单.
多张图片上传同理
但是.....AFNetworking 3.0 的队列貌似没有了.只好这么实现了.如果有人发现BUG或者其他未知的问题,欢迎指出.谢谢.
// 创建一个组
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t q = dispatch_get_global_queue(0, 0);
创建第一个请求A
dispatch_group_async(group, q, ^{
dispatch_group_enter(group);//很重要,不能少
NSLog(@"队列A启动");
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]init];
[manager GET:@"https://github.com/XibHua" parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"队列A结束");
dispatch_group_leave(group);//很重要,不能少
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"队列A结束");
dispatch_group_leave(group);//很重要,不能少
}]
});
创建第二个请求B
dispatch_group_async(group, q, ^{
dispatch_group_enter(group);
NSLog(@"队列B启动");
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]init];
[manager GET:@"https://github.com/XibHua" parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"队列B结束");
dispatch_group_leave(group);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"队列B结束");
dispatch_group_leave(group);
}];
});
创建第三个请求C
dispatch_group_async(group, q, ^{
dispatch_group_enter(group);
NSLog(@"队列C启动");
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]init];
[manager GET:@"https://github.com/XibHua" parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"队列C结束");
dispatch_group_leave(group);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"队列C结束");
dispatch_group_leave(group);
}];
});
// 监听所有任务完成 - 等到 group 中的所有任务执行完毕后,"
由队列调度 block 中的任务异步执行!"
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
// 修改为主队列,后台批量下载,结束后,主线程统一更新UI
NSLog(@"OK 都所有队列完毕 %@", [NSThread currentThread]);
});
多次输出
2016-08-20 22:28:44.060 base64Image[1797:44213] 队列B启动
2016-08-20 22:28:44.060 base64Image[1797:44220] 队列A启动
2016-08-20 22:28:44.060 base64Image[1797:44230] 队列C启动
2016-08-20 22:28:45.632 base64Image[1797:44183] 队列C结束
2016-08-20 22:28:48.295 base64Image[1797:44183] 队列A结束
2016-08-20 22:28:49.417 base64Image[1797:44183] 队列B结束
2016-08-20 22:28:49.418 base64Image[1797:44183] OK 都所有队列完毕{number = 1, name = main}
输出
2016-08-20 22:45:46.539 base64Image[1862:50163] 队列B启动
2016-08-20 22:45:46.539 base64Image[1862:50156] 队列A启动
2016-08-20 22:45:46.539 base64Image[1862:50168] 队列C启动
2016-08-20 22:45:48.223 base64Image[1862:50125] 队列A结束
2016-08-20 22:45:50.322 base64Image[1862:50125] 队列C结束
2016-08-20 22:45:54.975 base64Image[1862:50125] 队列B结束
2016-08-20 22:45:54.976 base64Image[1862:50125] OK 都所有队列完毕{number = 1, name = main}
达到了项目的需求(子订单比较多,我是循环创建请求)
暂时没有发现问题.
//附赠:关闭某个请求
NSURLSessionDataTask *task = [manager GET:@"https://github.com/XibHua"parameters:@"入参"progress:^(NSProgress *_Nonnull downloadProgress) {
//数据请求进度
} success:^(NSURLSessionDataTask *_Nonnull task,id _Nullable responseObject) {
//请求成功
} failure:^(NSURLSessionDataTask *_Nullable task,NSError *_Nonnull error) {
//请求失败
}];
//取消单个网络请求
[task cancel];