请求时间过长时,取消NSURLSession dataTask

加里·萨博

在某些网站上,以下方法会无限期挂起,我想取消请求的时间过长,我认为可以timeoutIntervalForRequest并且timeoutIntervalForResource可以对此进行控制,但是设置它们中的任何一个似乎都没有任何效果。

这是一个无限期挂起请求的示例网站:http : //www.samtoft.co.uk/showpic.php?id= 542&order=&search=# header

// fetch data from URL with NSURLSession
    class func getDataFromServerWithSuccess(myURL: String, noRedirect: Bool, callback: Result<String> -> Void) {

        var loadDataTask: NSURLSessionDataTask? = nil
        let sessionConfig: NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()

        sessionConfig.timeoutIntervalForRequest = 10.0
        sessionConfig.timeoutIntervalForResource = 10.0

        var myDelegate: MySession? = nil
        if noRedirect {
            myDelegate = MySession()
        }

        let session = NSURLSession(configuration: sessionConfig, delegate: myDelegate, delegateQueue: nil)
        loadDataTask = session.dataTaskWithURL(NSURL(string: myURL)!) { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in


                if let checkedData = data {

                let success = Result.Success(NSString(data: checkedData, encoding: NSASCIIStringEncoding) as! String)


                callback(success)

                } else {

                    let redirectError = NetworkError.FailedUrl("\(myURL) + \(error)")


                    if let request = loadDataTask?.currentRequest {

                        guard let urlExtension = request.URL?.pathExtension else {return}
                        guard let domain = request.URL?.host else {return}



                        guard let finalURLAsString = request.URL?.description else {return}
                        let failure = Result.Failure("\(finalURLAsString) + \(redirectError)") 
                            callback(failure)

                    }

                }
        }
        loadDataTask!.resume()


    }

编辑:对于任何遇到过相同问题的人,问题是我在考虑成功案例和错误案例,但不是针对请求未返回任何响应的情况,因此我添加了以下内容:

if response == nil {
                print("NO RESPONSE \(myURL)")
                let noResponse = Result.NoResponse("NO RESPONSE") 
                callback(noResponse)
            }
詹姆斯·饶

我已将您的代码提取为

func getDataFromServerWithSuccess(myURL: String) {
    var loadDataTask: NSURLSessionDataTask? = nil
    let sessionConfig: NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()

    //sessionConfig.timeoutIntervalForRequest = 11.0
    sessionConfig.timeoutIntervalForResource = 11.0

    let session = NSURLSession(configuration: sessionConfig)
    loadDataTask = session.dataTaskWithURL(NSURL(string: myURL)!) { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in

        print("end")
    }

    loadDataTask!.resume()
}

对于超时,它确实可以正常工作。我想委托人可能出了点问题,无法正确接收响应。希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JSON网络请求未输入URLSession.shared.dataTask

来自分类Dev

Swift URLSession.shared.dataTask GET 请求 -1001 返回超时

来自分类Dev

NSURLProtocol是否可以与NSURLSession {上传,下载} dataTask一起使用

来自分类Dev

如果在页面完成之前退出页面,如何取消URLSession.shared.dataTask?

来自分类Dev

如何获取请求中标头的值 (URLSession.shared.dataTask(with: request) { (data, response, error)

来自分类Dev

Swift 3开发者快照中的POST请求给出了“对成员'dataTask(with:completionHandler :)的模糊引用”

来自分类Dev

Swift 3开发者快照中的POST请求给出了“对成员'dataTask(with:completionHandler :)的模糊引用”

来自分类Dev

当请求时间过长时使用哪个 HTTP 响应代码?

来自分类Dev

在URLSession.shared.dataTask之后调用performSegue

来自分类Dev

在 dataTask() 方法完成之前调用 func collectionView

来自分类Dev

URLSession.dataTask 返回 0 的数据

来自分类Dev

将变量传递给 dataTask 异步函数

来自分类Dev

dataTask 上的错误 - “无法使用类型为...的参数列表调用‘dataTask’”

来自分类Dev

请求执行时间过长

来自分类常见问题

URLSession.shared.dataTask与dataTaskPublisher,什么时候使用?

来自分类Dev

无法使用类型为参数的列表调用“ dataTask”

来自分类Dev

URLSession.shared.dataTask与dataTaskPublisher,什么时候使用?

来自分类Dev

何时对URLSession.shared.dataTask使用弱自身

来自分类Dev

对成员'dataTask(with:completionHandler :)的含糊不清的引用

来自分类Dev

对成员“dataTask(with:completionHandler:)”错误的不明确引用

来自分类Dev

appleTV: URLSession.shared.dataTask 下载为空

来自分类Dev

来自 HTTPS URLSession.dataTask 的 0 字节数据

来自分类Dev

连接时间过长时重试连接

来自分类Dev

在 dataTask 中没有更多上下文的表达式类型不明确

来自分类Dev

在 URLSession.shared.dataTask 期间存储来自异步闭包的数据

来自分类Dev

URLSession dataTask - 错误检查 - 无法通过 '!' 分配:'err' 是一个 'let' 常量

来自分类Dev

当详尽搜索的时间过长时,如何找到最佳组合?

来自分类Dev

播放编译时间过长

来自分类Dev

R循环时间过长

Related 相关文章

  1. 1

    JSON网络请求未输入URLSession.shared.dataTask

  2. 2

    Swift URLSession.shared.dataTask GET 请求 -1001 返回超时

  3. 3

    NSURLProtocol是否可以与NSURLSession {上传,下载} dataTask一起使用

  4. 4

    如果在页面完成之前退出页面,如何取消URLSession.shared.dataTask?

  5. 5

    如何获取请求中标头的值 (URLSession.shared.dataTask(with: request) { (data, response, error)

  6. 6

    Swift 3开发者快照中的POST请求给出了“对成员'dataTask(with:completionHandler :)的模糊引用”

  7. 7

    Swift 3开发者快照中的POST请求给出了“对成员'dataTask(with:completionHandler :)的模糊引用”

  8. 8

    当请求时间过长时使用哪个 HTTP 响应代码?

  9. 9

    在URLSession.shared.dataTask之后调用performSegue

  10. 10

    在 dataTask() 方法完成之前调用 func collectionView

  11. 11

    URLSession.dataTask 返回 0 的数据

  12. 12

    将变量传递给 dataTask 异步函数

  13. 13

    dataTask 上的错误 - “无法使用类型为...的参数列表调用‘dataTask’”

  14. 14

    请求执行时间过长

  15. 15

    URLSession.shared.dataTask与dataTaskPublisher,什么时候使用?

  16. 16

    无法使用类型为参数的列表调用“ dataTask”

  17. 17

    URLSession.shared.dataTask与dataTaskPublisher,什么时候使用?

  18. 18

    何时对URLSession.shared.dataTask使用弱自身

  19. 19

    对成员'dataTask(with:completionHandler :)的含糊不清的引用

  20. 20

    对成员“dataTask(with:completionHandler:)”错误的不明确引用

  21. 21

    appleTV: URLSession.shared.dataTask 下载为空

  22. 22

    来自 HTTPS URLSession.dataTask 的 0 字节数据

  23. 23

    连接时间过长时重试连接

  24. 24

    在 dataTask 中没有更多上下文的表达式类型不明确

  25. 25

    在 URLSession.shared.dataTask 期间存储来自异步闭包的数据

  26. 26

    URLSession dataTask - 错误检查 - 无法通过 '!' 分配:'err' 是一个 'let' 常量

  27. 27

    当详尽搜索的时间过长时,如何找到最佳组合?

  28. 28

    播放编译时间过长

  29. 29

    R循环时间过长

热门标签

归档