【发布时间】:2017-12-26 14:20:27
【问题描述】:
这种图片下载技术能否使用超时:Why doesn't image load on main thread??
或者如果我想使用超时,我必须使用 NSURLSession 吗?
【问题讨论】:
标签: swift nsurlsession swift4
这种图片下载技术能否使用超时:Why doesn't image load on main thread??
或者如果我想使用超时,我必须使用 NSURLSession 吗?
【问题讨论】:
标签: swift nsurlsession swift4
您正在寻找timeoutintervalForResource 属性。如果使用URLSession.shared,则默认超时为 7 天。如果您想使用不同的超时时间,您需要创建自己的会话:
let config = URLSessionConfiguration.default
config.timeoutIntervalForResource = 60 // timeout, in seconds
// A 20 MB image from NASA
let url = URL(string: "https://www.nasa.gov/sites/default/files/thumbnails/image/hs-2015-02-a-hires_jpg.jpg")!
let session = URLSession(configuration: config)
session.dataTask(with: url) { data, response, error in
if let error = error {
print(error)
}
// do something
}.resume()
足够低的超时,你会看到一个超时错误。请注意,URLSessionConfiguration 有 2 个超时:timeoutIntervalForResource 和 timeoutIntervalForRequest:
...Resource是等待全网运行完成的时间(默认为7天)...Request 是等待下一个数据块到达的时间(默认为 60 秒)如果您的目标是在 x 分钟内下载某些内容,请使用 ...Resource。如果您的目标是“网络必须在 x 秒内做出响应,否则会出现故障”,请使用 ...Request。
【讨论】:
不,您不必使用 NSURLSession。超时属性在 URLSesssionConfiguration 中,您只需要使用所需的配置创建 URLSession 的实例。
因此,您需要创建自己的 URLSession 实例并从该实例启动 dataTask,而不是直接使用 URLSession.shared。
您可能对 timeoutIntervalForResource 感兴趣,我认为它默认为 7 天。
这是来自question 答案的相关 Swift 片段:
let sessionConfig = URLSessionConfiguration.default
sessionConfig.timeoutIntervalForRequest = 30.0
sessionConfig.timeoutIntervalForResource = 60.0
let session = URLSession(configuration: sessionConfig)
【讨论】: