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() // 新增这一行,启动任务
对应你遇到的现象解释
- 因为任务从未启动,所以
completionHandler永远不会执行; - 服务器自然收不到任何请求,日志无记录;
- 创建任务是同步操作,所以后续代码可以正常执行,也不会抛出错误;
- 未启动的任务发送/接收字节数都是0,预期值为-1是正常的挂起状态表现。
所有URLSession的闭包式任务(包括dataTask、downloadTask)都遵循这个规则,这是Swift网络开发中很容易忽略的细节,尤其是从async/await语法切换到闭包写法时。
内容的提问来源于stack exchange,提问作者PlankTon
相关产品推荐
相关产品推荐

