- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 NSURLSessionDataTask
调用 API 的函数,您可以在此处查看它:
- (void)getExplorerUrl:(void (^)(NSString *))measurement_url {
NSString *path = [NSString stringWithFormat:@"https://api.ooni.io/api/v1/measurements?report_id=%@&input=%@", self.report_id, self.url_id.url];
NSURL *url = [NSURL URLWithString:path];
NSURLSessionDataTask *downloadTask = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (!error) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
NSArray *resultsArray = [dic objectForKey:@"results"];
if ([resultsArray count] == 0)
measurement_url(nil);
measurement_url([[resultsArray objectAtIndex:0] objectForKey:@"measurement_url"]);
}
else {
// Fail
measurement_url(nil);
NSLog(@"error : %@", error.description);
}
}];
[downloadTask resume];
}
该函数使用完成处理程序在异步调用完成时返回一个值。
现在我想要一个 for 循环来循环许多对象并为每个对象调用此 API:
for (Measurement *measurement in [Measurement measurementsWithJson]){
[measurement getExplorerUrl:^(NSString *measurement_url) {
if (measurement_url != nil){
//Do something
NSLog(@"%@ measurement_url %@",measurement.Id, measurement_url);
}
else {
NSLog(@"%@ measurement_url null", measurement.Id);
}
}];
}
有没有办法将最大并发异步调用设置为 10?一个调用结束后立即执行下一个调用。
最佳答案
我同意 @Rob 的观点,他可以为 URLSession
创建自己的配置。但是,如果这个 sharedSession
在不同的作业中使用,并且他希望该作业以最大并发异步调用数为 10 运行,我建议使用 NSOperationQueue
或 dispatch_semaphore
来解决这个问题。请引用下面的例子来初步了解这些方法
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
queue.maxConcurrentOperationCount = 10;
for (int i = 1; i <= 30; i++) {
[queue addOperationWithBlock:^{
NSLog(@"[Q] %d", i);
sleep(1);
}];
}
或
dispatch_queue_t q = dispatch_queue_create("q.q", DISPATCH_QUEUE_CONCURRENT);
dispatch_semaphore_t s = dispatch_semaphore_create(10);
for (int i = 1; i <= 30; i++) {
dispatch_async(q, ^{
NSLog(@"[Q] %d", i);
sleep(1);
dispatch_semaphore_signal(s);
});
}
您可以从控制台观察查看结果。基本上这2种方法最多同时执行10个调用,只要其中一个调用完成,其他的就会进入执行队列。
希望这能帮助您解决问题。有需要的可以讨论。!!!
关于ios - NSURLSessionDataTask 的最大并发实例数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56728301/
我有一个使用 NSURLSessionDataTask 调用 API 的函数,您可以在此处查看它: - (void)getExplorerUrl:(void (^)(NSString *))measu
我正在尝试向服务器发出请求,该请求应该返回我可以在应用程序的其余部分中使用的数据。这是我的代码: func makeNewUser() -> NSDictionary { var full_u
我正在使用 AFNetworking 并且我正在覆盖 -dataTaskWithRequest:completionHandler: 以基本上 MITM 我的请求并在调用实际响应 block 之前进行
我使用 NSURLSessionDataTask 获取 JSON 提要,并填充位于共享存储(单例)内的 NSMutableArray。外部世界可以通过将其转换为 NSArray 的 getter 来访
我不知道如何同步 NSURLSessionDataTask。 如何在 syncInfo1Info2 中同步这两个 session : - (void) syncInfo1Info2 { //How
我想知道 NSURLSessionDataTask 在后台的行为。 NSURLSessionDataTask 是否会立即暂停(一旦应用程序进入后台)?还是 iOS 会给出一些时间(希望有 30 秒左右
我正在创建一个 NSMutableRequest: self.req = [NSMutableURLRequest requestWithURL:myURL cachePolicy:NSURLRequ
当我开始使用 NSURLSessionDataTask 下载文件时,有一段时间进度不工作。然后在完成下载后只显示全蓝色的进度条。 我的代码 - (void)URLSession:(NSURLSess
我对 Objective C 和 iOS 开发总体来说是新手。我正在尝试创建一个应用程序,它会发出 http 请求并在标签上显示内容。 当我开始测试时,我注意到标签是空白的,尽管我的日志显示我已经恢复
我正在学习有关访问 API 和解析结果的教程。我正在逐字逐句地学习教程,但由于“预期返回‘NSURLSessionDataTask’的函数中缺少返回值”,我无法运行该程序 所以我将返回语句更改为“re
我要使用 NSURLSessionDataTask 执行请求链。当第一个请求完成时,我需要使用第一个请求中的 responseData 来执行另一个多重请求。最后,我得到 NSArray 并提供给 T
我正在尝试从将同时运行的多个 NSURLSessionDataTasks 中聚合数据。 __block NSMutableDictionary *languageDetails = [NSMutabl
我刚刚用 Swift 开发了一个库,用于将数据发布到特定服务器。我使用 NSURLSession.sharedSession().dataTaskWithRequest(request) 打开连接。现
我有一个 iOS 应用程序,它使用 NSOperationQueue、NSOperations 和 AFNetworking 2.1.0 来触发对服务器的请求。 -[NSOperation main]
我知道我可以使用 dataTaskWithURL:completionHandler: 获取 completionHandler block 中的数据,但这会阻止触发委托(delegate)方法,我需
场景: 作为用户,我可以拍摄(无限量)存储在应用程序文档文件夹中的照片和视频。这些媒体文件中的每一个都会在 Sqlite 数据库中获得一条记录,其中包含附加信息(例如标题)。所有这些都可以完全离线完成
在使用 NSURLSessionDataTask 向服务器发送 JSON 请求时,我遇到了一个非常奇怪的问题。 第一个请求通过并且我收到正确的 JSON 响应,当我执行第二个请求时,我总是得到旧的响应
我想确定来自 NSURLSessionDataTask 的响应是来自缓存,还是来自服务器 我正在从 创建我的 NSURLSessionDataTask request.cachePolicy = NS
我有一个注册 View Controller ,它处理所有用户输入并调用传递给它的另一个类 (wsClass) 中的函数,该数据作为 NSDictionary。 调用 wsClass 中的函数并建立连
我从 Web 获取 JSON 数据,对其进行解析,然后使用它在 map 上显示图钉。 这里是方法一,没有问题: NSString *CLIENT_ID = @"SECRET_ID"; NSSt
我是一名优秀的程序员,十分优秀!