此图片下载技术是否可以使用超时:Why doesn't image load on main thread??
或者,如果我想使用超时,我必须使用NSURLSession吗?
答案 0 :(得分:4)
您正在寻找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秒)如果您的目标是使用...Resource
在 x 分钟内下载内容。如果您的目标是"网络必须在 x 秒内响应,或者它已经停止",请使用...Request
。
答案 1 :(得分:0)
不,您不必使用NSURLSession。超时属性位于URLSesssionConfiguration中,您只需使用所需的配置创建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)