Tôi cần đợi một số yêu cầu AFNetworking hoàn thành, tôi đã thử sử dụng các nhóm công văn, nhưng dường như tôi không thể làm đúng.Đợi nhiều yêu cầu AFNetworking để hoàn thành
Dưới đây là mã của tôi:
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");
Vấn đề là nó bị mắc kẹt trên dispatch_group_wait, bởi vì không phải khối thành công, cũng không phải là khối thất bại này được gọi là.
Tôi có thể giải quyết nó bằng cách nào?
Bạn đã thử sử dụng dispatch_group_notify chưa? – jtbandes
có, hoạt động. Tuy nhiên điều đó không giải quyết được vấn đề của tôi. Do ứng dụng đã được xây dựng như thế nào (tôi đã kế thừa dự án), tôi cần phải ngừng thực hiện phương thức. – guidev
Thật không may; bạn có thể muốn xem xét tái cấu trúc nó. Nếu bạn chặn các chủ đề, bạn sẽ lãng phí một chủ đề mà chỉ có công việc là để chờ đợi cho thread khác để làm một cái gì đó. libdispatch áp đặt một giới hạn 64 luồng mà nó sẽ khởi động để phục vụ hàng đợi, do đó, tùy thuộc vào ứng dụng của bạn đang làm gì, nó có thể trở thành một vấn đề. – jtbandes