异步图像下载可以超时还是我需要 NSURLSession?
Can async image download have timeout or do I need NSURLSession?
这个图像下载技术可以使用超时:?
或者如果我想使用超时,我必须使用 NSURLSession 吗?
不,您不必使用 NSURLSession。超时属性在 URLSessionConfiguration 中,您只需要使用所需的配置创建 URLSession 的实例。
因此,与其直接使用 URLSession.shared
,不如创建自己的 URLSession 实例并从该实例启动 dataTask
。
您可能对 timeoutIntervalForResource 感兴趣,我认为它的默认值为 7 天。
这里是 question 答案中的相关 Swift 片段:
let sessionConfig = URLSessionConfiguration.default
sessionConfig.timeoutIntervalForRequest = 30.0
sessionConfig.timeoutIntervalForResource = 60.0
let session = URLSession(configuration: sessionConfig)
您正在寻找 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
。如果您的目标是 "network must response within x seconds or it's down",请使用 ...Request
。
这个图像下载技术可以使用超时:
或者如果我想使用超时,我必须使用 NSURLSession 吗?
不,您不必使用 NSURLSession。超时属性在 URLSessionConfiguration 中,您只需要使用所需的配置创建 URLSession 的实例。
因此,与其直接使用 URLSession.shared
,不如创建自己的 URLSession 实例并从该实例启动 dataTask
。
您可能对 timeoutIntervalForResource 感兴趣,我认为它的默认值为 7 天。
这里是 question 答案中的相关 Swift 片段:
let sessionConfig = URLSessionConfiguration.default
sessionConfig.timeoutIntervalForRequest = 30.0
sessionConfig.timeoutIntervalForResource = 60.0
let session = URLSession(configuration: sessionConfig)
您正在寻找 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
。如果您的目标是 "network must response within x seconds or it's down",请使用 ...Request
。