我正在创建一个NSMutableRequest
:
self.req = [NSMutableURLRequest requestWithURL:myURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10.0];
超时设置为 10 秒,因为我不希望用户等待太久才能获得反馈。之后,我创建了一个NSURLSessionDataTask
:
NSURLSessionDataTask *task = [self.session dataTaskWithRequest:self.req completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSHTTPURLResponse * httpResp = (NSHTTPURLResponse *)response;
if (error) {
// this is where I get the timeout
}
else if (httpResp.statusCode < 200 || httpResp.statusCode >= 300) {
// handling error and giving feedback
}
else {
NSError *serializationError = nil;
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&serializationError];
}
[task resume];
}
问题是服务器进入网关超时并且需要很长时间。我收到超时错误并向用户提供反馈,但是由于超时错误,以下所有 API 调用都以相同的方式失败。阻止它的唯一方法是终止应用程序并重新开始。超时错误后我应该做些什么来终止任务或连接?如果我没有设置超时并且我等到我从服务器收到错误代码,那么以下所有调用都可以正常工作(但是用户等待了很多!)。
我试图取消任务:
NSURLSessionDataTask *task = [self.session dataTaskWithRequest:self.req completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSHTTPURLResponse * httpResp = (NSHTTPURLResponse *)response;
if (error) {
// this is where I get the timeout
[task cancel];
}
...
[task resume];
}