gpt4 book ai didi

objective-c - NSURLSessionDownloadTask 在使用后台配置时不断重试

转载 作者:太空狗 更新时间:2023-10-30 03:35:27 28 4
gpt4 key购买 nike

我遇到了后端缓慢和使用后台配置下载数据的问题。

NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration backgroundSessionConfiguration:identifier];
_backgroundSession = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
NSURLSessionDownloadTask *downloadTask = [_backgroundSession downloadTaskWithURL:URL];
[downloadTask resume];

如果连接已建立,但发送回数据的时间超过 60 秒,则会发生超时。那也行。但是,我遇到的行为是我没有收到错误。 Session 只是发出一个新的请求。 “再给我数据”。我不知道这是在哪里发生的。不在我的代码中,也没有调用我所知道的委托(delegate)方法。我只能访问服务器日志。服务器发回数据大约需要 68 秒,但应用程序只是忽略它,因为它正在等待新请求。

一种解决方案是增加超时值。但我不喜欢它,它只适用于 iOS 7。不适用于 iOS 8。

sessionConfig.timeoutIntervalForRequest = 10 * 60.0;

有没有人对此有任何见解?我找到了这个 link about timeout issue for background session在 stackoverflow 上。它已经 10 个月大了,但没有解决方案,只有人们同意。

最佳答案

从iOS8开始,后台模式的NSUrlSession在服务器没有响应的情况下不会调用这个delegate方法。 -(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error下载/上传无限期地保持空闲。当服务器没有响应时,在 iOS7 上调用此委托(delegate)会出错。

一般来说,如果网络出现问题,NSURLSession 后台 session 不会使任务失败。相反,它会继续寻找运行请求的好时机并在那个时候重试。这一直持续到资源超时到期(即,用于创建 session 的 NSURLSessionConfiguration 对象中的 timeoutIntervalForResource 属性的值)。该值的当前默认值为一周!换句话说,在 iOS7 中超时失败的行为是不正确的。在后台 session 的上下文中,更有趣的是不要因为网络问题而立即失败。所以从 iOS8 开始,NSURLSession 任务即使遇到超时和网络丢失也会继续。然而,它会继续,直到达到 timeoutIntervalForResource。

所以基本上 timeoutIntervalForRequest 不会在后台 session 中工作,但 timeoutIntervalForResource 会。

来源:Apple Forum

关于objective-c - NSURLSessionDownloadTask 在使用后台配置时不断重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26379449/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com