tôi đang tạo ra một NSMutableRequest
:timeout NSURLSessionDataTask yêu cầu tiếp theo thất bại
self.req = [NSMutableURLRequest requestWithURL:myURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10.0];
Thời gian chờ được thiết lập để có 10 giây bởi vì tôi không muốn người dùng phải chờ đợi quá lâu để có được một thông tin phản hồi. Sau đó tôi tạo ra một 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];
}
Vấn đề là các máy chủ đi vào Cổng Timeout và phải mất rất nhiều thời gian. Tôi nhận được lỗi hết thời gian chờ và tôi đưa ra phản hồi cho người dùng, nhưng tất cả các cuộc gọi API sau đều không thành công theo cùng một cách do lỗi hết thời gian chờ. Cách duy nhất để ngăn chặn nó là để giết các ứng dụng và bắt đầu lại. Có điều gì tôi nên làm để giết nhiệm vụ hoặc kết nối sau một lỗi hết thời gian chờ không? Nếu tôi không đặt thời gian chờ và tôi đợi cho đến khi tôi nhận được mã lỗi từ máy chủ thì tất cả các cuộc gọi sau hoạt động hoàn hảo (Nhưng người dùng chờ rất nhiều!).
tôi đã cố gắng để hủy bỏ nhiệm vụ:
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];
}
tôi đoán, bạn có thể yêu cầu để tái khởi tạo 'self.req' nếu có một lỗi/thời gian chờ. Không chắc chắn về điều này mặc dù. – Mrunal
thử gọi các kết nối bằng ứng dụng POSTMAN trong chrome và xem bạn vẫn nhận được lỗi hết thời gian chờ hay không –
Bạn có đang tạo tác vụ này trong một số khối không? Hoặc một số chủ đề khác, ngoài chủ đề chính? –