You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

URLSession.shared.upload可用但uploadTask无响应?Swift开发问题

问题排查:URLSession uploadTask闭包未执行的原因

核心问题是你创建完uploadTask后没有调用resume()方法。

关键差异说明

  • async/await版本的upload(for:from:delegate:)会自动启动网络请求,无需手动操作;
  • 而基于闭包的uploadTask(with:from:completionHandler:)创建后默认处于挂起状态,必须调用resume()才会发起请求。

修复代码

给创建好的任务添加resume()调用即可:

let response = URLSession.shared.uploadTask(with: self.loginURLRequest, from: encodedLoginDetails,
                                            completionHandler: { data, response, error in
                                              print("We got here")
                                            })
response.resume() // 新增这一行,启动任务

对应你遇到的现象解释

  1. 因为任务从未启动,所以completionHandler永远不会执行;
  2. 服务器自然收不到任何请求,日志无记录;
  3. 创建任务是同步操作,所以后续代码可以正常执行,也不会抛出错误;
  4. 未启动的任务发送/接收字节数都是0,预期值为-1是正常的挂起状态表现。

所有URLSession的闭包式任务(包括dataTask、downloadTask)都遵循这个规则,这是Swift网络开发中很容易忽略的细节,尤其是从async/await语法切换到闭包写法时。

内容的提问来源于stack exchange,提问作者PlankTon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 01:20:46