3 回答
TA贡献1998条经验 获得超6个赞
如果基于信号量的方法不起作用,请尝试基于轮询的方法。
var reply = Data()
/// We need to make a session object.
/// This is key to make this work. This won't work with shared session.
let conf = URLSessionConfiguration.ephemeral
let sess = URLSession(configuration: conf)
let task = sess.dataTask(with: u) { data, _, _ in
reply = data ?? Data()
}
task.resume()
while task.state != .completed {
Thread.sleep(forTimeInterval: 0.1)
}
FileHandle.standardOutput.write(reply)
基于轮询的方法非常可靠地工作,但是有效地将最大吞吐量限制为轮询间隔。在此示例中,它被限制为10次/秒。
我为此做了一个Swift包。
到目前为止,基于信号量的方法已经很好地工作了,但是自Xcode 11时代以来,它就被打破了。(也许只适合我吗?)
如果我等待信号量,数据任务不会完成。如果我在其他线程上等待信号量,则该任务将失败并显示错误。
nw_connection_copy_protocol_metadata [C2] Client called nw_connection_copy_protocol_metadata on unconnected nw_connection error.
随着苹果公司的发展,实施似乎有所改变Network.framework。
TA贡献1826条经验 获得超6个赞
我鼓励您发布答复作为解决方案NSURLSession.dataTaskWithURL(_:completionHandler:):
此方法旨在替代NSURLConnection的sendAsynchronousRequest:queue:completionHandler:方法,并具有支持自定义身份验证和取消的附加功能。
- 3 回答
- 0 关注
- 552 浏览
添加回答
举报