URLRequest在超时前失败

时间:2019-05-07 07:29:22

标签: ios nsurlsession nsurlrequest urlsession urlrequest

我想为不同的请求设置不同的超时时间。我的请求例程如下:

var request = URLRequest(url: url,
                         cachePolicy: .reloadIgnoringLocalCacheData,
                         timeoutInterval: timeout)
// setting headers and body...
sessionTask = localURLSession.dataTask(with: request)
sessionTask?.resume()

其中localURLSession被定义为公共变量:

public var localURLSession: Foundation.URLSession {
    return Foundation.URLSession(configuration: localConfig, delegate: self, delegateQueue: nil)
}

public var localConfig: URLSessionConfiguration {
    let res = URLSessionConfiguration.default
    res.timeoutIntervalForRequest = Self.ordinaryRequestsTimeout // 20 seconds
    return res
}

那我有两个问题:

  1. 当我同时发出2个请求且丢失100%网络链接时 护发素(第一次有20秒的超时时间,第二次有40秒的超时时间 秒),两个请求都将在8秒后失败。我不明白 为什么。
  2. 我第一次提出要求时损失100%     网络链接调节器,它超时失败,如预期的那样,但是     重试此请求将在1秒钟内失败。我要等所有     每次都超时。

1 个答案:

答案 0 :(得分:1)

很有可能,由于8秒钟的故障,DNS请求超时,因此您根本没有连接。

对于1秒钟的故障,操作系统可能会得出结论,即主机不可访问,并且甚至在网络发生变化或它成功向某处的某个主机发出至少一个请求(负DNS缓存)之前,都不会再次尝试。

也就是说,没有数据包跟踪,我无法确定其中任何一条语句。