【发布时间】:2016-06-16 17:53:44
【问题描述】:
我需要等待几个 AFNetworking 请求完成,我尝试使用调度组,但似乎无法正确处理。
这是我的代码:
dispatch_group_t group = dispatch_group_create();
for (int k = 0; k < 10 ; k++) {
dispatch_group_enter(group);
[[AFHTTPSessionManager manager] GET:@"http://google.com/" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"success");
dispatch_group_leave(group);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"failure");
dispatch_group_leave(group);
}];
}
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
NSLog(@"DONE");
问题是它卡在 dispatch_group_wait 上,因为既没有调用成功块,也没有调用失败块。
我该如何解决?
【问题讨论】:
-
您是否尝试过使用 dispatch_group_notify?
-
是的,这行得通。但是,这并不能解决我的问题。由于应用程序的构建方式(我继承了项目),我需要停止执行该方法。
-
那很不幸;您可能需要考虑重构它。如果你阻塞线程,你将浪费一个线程,它唯一的工作就是等待另一个线程做某事。 libdispatch 将启动用于服务队列的线程限制为 64 个,因此根据您的应用程序正在执行的操作,它可能会成为问题。
标签: objective-c afnetworking grand-central-dispatch