在实现多个 HTTP 调用时,我注意到 URLSession 上有一些奇怪的行为。据我所知,URLSession 数据任务过去在网络连接不可用时会立即抛出错误(错误 -1009 Internet 连接似乎已离线)。
我现在也在执行网络请求,并且在飞行模式下执行请求时,请求会在失败之前一直运行到超时。我尝试创建一个自定义配置来防止这种情况发生,但这不起作用。如何重新启用或配置在没有连接时请求立即崩溃的行为?
let url = URL(string: "https://www.google.com/")!
let config = URLSessionConfiguration.default
config.waitsForConnectivity = false
config.timeoutIntervalForRequest = 2
config.timeoutIntervalForResource = 0
URLSession(configuration: config).dataTask(with: url) { d, r, e in
print(d?.count, (r as? HTTPURLResponse)?.statusCode, e?.localizedDescription)
}.resume()
配置文档似乎不一致或不正确。
我发现的一个事实。
即使在最新的 Xcode/iOS (2024) 中,该功能似乎也在模拟器中根本不起作用。
在模拟器中,
func urlSession(_ session: URLSession, taskIsWaitingForConnectivity task: URLSessionTask)
可以工作,但其他都不起作用,
即当带宽恢复时,无论任何设置如何,它都不会再尝试。