首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >URLSession dataTask长延迟

URLSession dataTask长延迟
EN

Stack Overflow用户
提问于 2021-04-09 07:03:29
回答 1查看 568关注 0票数 1

当我从代码中请求API时,我在4-6秒后得到响应,这太长了。从邮递员那里我得到120毫秒后的回复。我的代码出了什么问题吗?这是我的代码,我正在检查这两张照片之间的时间:

代码语言:javascript
运行
复制
func makeUrlRequest<T: Codable>(_ request: URLRequest, resultHandler: @escaping (Result<T, RequestError>) -> Void) {
        var req = request
        req.addValue("application/json", forHTTPHeaderField: "Content-Type")
        req.addValue("application/json", forHTTPHeaderField: "Accept")
        let config = URLSessionConfiguration.default
        let urlSession = URLSession(configuration: config, delegate: self, delegateQueue: .main)
        print("Request: start at: \(Date())") //Request: start at: 2021-04-09 06:53:32 +0000
        let urlTask = urlSession.dataTask(with: req) { data, response, error in
            print("Request: finished at: \(Date())") //Request: finished at: 2021-04-09 06:53:36 +0000
            DispatchQueue.main.async {
                guard error == nil else {
                    resultHandler(.failure(.clientError))
                    return
                }

                guard let response = response as? HTTPURLResponse, 200...299 ~= response.statusCode else {
                    resultHandler(.failure(.serverError))
                    return
                }

                guard let data = data else {
                    resultHandler(.failure(.noData))
                    return
                }

                guard let decodedData: T = self.decodedData(data) else {
                    resultHandler(.failure(.dataDecodingError))
                    return

                }
                
                resultHandler(.success(decodedData))
            }
        }

        urlTask.resume()
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-09 07:32:46

而不是

代码语言:javascript
运行
复制
let urlSession = URLSession(configuration: config, delegate: self, delegateQueue: .main)
print("Request: start at: \(Date())") //Request: start at: 2021-04-09 06:53:32 +0000
let urlTask = urlSession.dataTask(with: req) { data, response, error in...

你应该用

代码语言:javascript
运行
复制
let task = URLSession.shared.dataTask(with: req) { (data, response, error) in...

编辑:

我看到你想用一位代表。在这种情况下,不应该使用完成处理程序,而应该添加委托方法:

代码语言:javascript
运行
复制
func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data)
代码语言:javascript
运行
复制
func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?)

欲了解更多信息,请访问苹果的文档

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67016504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档