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 關注
- 584 瀏覽
添加回答
舉報