在iOS 10上的swift 3中指定的时间间隔后,URLSession未获得超时

在iOS 10上的swift 3中指定的时间间隔后,URLSession未获得超时,ios,swift,nsurlsession,Ios,Swift,Nsurlsession,我正试图通过urlsession在swift3中命中一个Json请求。请求在10秒后未超时 let request = NSMutableURLRequest(url: NSURL(string:url )! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval

我正试图通过urlsession在swift3中命中一个Json请求。请求在10秒后未超时

let request = NSMutableURLRequest(url: NSURL(string:url )! as URL,
                                          cachePolicy: .useProtocolCachePolicy,
                                          timeoutInterval: 10.0 )
        request.httpMethod = "POST"
        request.allHTTPHeaderFields = headers
        request.httpBody = RequestBody
        let configuration =
            URLSessionConfiguration.default
        configuration.timeoutIntervalForRequest = 10
        configuration.timeoutIntervalForResource = 10
        let session = URLSession(configuration: configuration, delegate: self as? URLSessionDelegate, delegateQueue:OperationQueue.main)
        let dataTask = session.dataTask(with: request as URLRequest) {
            (data, response, error) in...


}

问题是您从未真正启动网络请求。 您需要调用dataTask.resume()来实际启动请求。这需要在关闭后立即发生,请参见下面的代码:

guard let url = URL(string: urlString) else { return }
let request = URLRequest(url: url, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0 )
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = RequestBody

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest) {
            (data, response, error) in...

}
dataTask.resume()

@DávidPászor为错误的标题感到抱歉。我使用的是URLSession Only,但我仍然要记住,您设置的超时是空闲超时,只有当请求在n秒以上没有数据时才会触发。如果应用程序仍在缓慢获取数据,则计时器将继续重置。顺便说一句,强烈反对设置如此短的超时。蜂窝网络通常速度非常慢,因此,除非您正在做一些非常不寻常的事情,否则这样做几乎肯定会给您的用户带来严重的问题。这么短的超时时间,你想完成什么?有了这些信息可能会帮助我们推荐更好的方法来解决这个问题。我在代码中使用了data task.resume(),我没有在我的问题上添加语法,但我没有超时