我想对我的远程服务器执行两个请求并异步获取和解析两个响应,但仍然阻塞主线程直到两个进程都完成。
这是我在 AppDelegate.m 的 application: didFinishLaunchingWithOptions:
中的代码方法:
NSURL *url1 = [NSURL URLWithString: @"url1"];
NSURL *url2 = [NSURL URLWithString:@"url2"];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task1 = [session dataTaskWithURL:url1 completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
//process1
}];
[task1 resume];
NSURLSessionDataTask *task2 = [session dataTaskWithURL:url2 completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
//process2
}];
[task2 resume];
在这段代码中,我想从 url1
获取数据并解析 process1
中的响应,也想对 url2
做同样的事情和 process2
.
然而,虽然我想异步执行上面的这两个过程,但我也想等待两者完成每项工作后再结束 AppDelegate.m
的 application: didLaunchingWithOptions:
方法,因为如果在上述两个执行完成之前初始化它,我的第一个 View Controller (在 AppDelegate.m 之后)会发生错误。
这在一些语言如Python或Go中很容易实现,我认为它也可以在NSURLConnection
中实现。在 Objective-C 中(虽然我没有尝试,如果不是这样请原谅我)。但是,我想使用 NSURLSession
在这种情况下,因为实际的 session 配置比上面的代码要复杂一些。
那么在NSURLSession
中使用同步特性是否可行? ?
最佳答案
为什么要阻塞主线程?这对用户不利,对您也不利。
更改您的 View Controller 以显示进度指示而不是崩溃。这使应用程序保持事件状态,并让用户了解正在发生的事情。如果您愿意,您可以制作一个漂亮的动画供用户在等待时观看。
关于ios - NSURLSession - 执行两个请求并解析两个响应,但仍然阻塞主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21953275/