gpt4 book ai didi

ios - 如何知道在 iOS 中何时完成并行 HTTP 请求?

转载 作者:搜寻专家 更新时间:2023-10-31 19:31:36 25 4
gpt4 key购买 nike

我只需要在请求多个 HTTP 资源以收集一些数据后 运行一些代码。

我阅读了很多文档并且发现我应该使用 GCD 和调度组:

  1. 使用 dispatch_group_create() 创建一个组
  2. 对于每个 请求:
    • 使用dispatch_group_enter()进入调度组
    • 运行请求
    • 收到回复后,使用dispatch_group_leave()离开群组
  3. 等待 dispatch_group_wait()
  4. 使用 dispatch_release() 释放组

但我不确定这种做法是否会存在一些缺陷——或者是否有更好的方法来等待并行请求完成?

下面的代码看起来运行良好:

    // Just send a request and call the when finished closure
func sendRequest(url: String, whenFinished: () -> Void) {
let request = NSMutableURLRequest(URL: NSURL(string: url))
let task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: {
(data, response, error) -> Void in
whenFinished()
})
task.resume()
}

let urls = ["http://example.com?a",
"http://example.com?b",
"http://example.com?c",
"http://example.com?d",
"http://invalid.example.com"]

var fulfilledUrls: Array<String> = []

let group = dispatch_group_create();

for url in urls {
dispatch_group_enter(group)

sendRequest(url, {
() in
fulfilledUrls.append(url)
dispatch_group_leave(group)
})

}

dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

for url in fulfilledUrls { println(url) }

最佳答案

是的,这是基本思想,尽管您最好使用 dispatch_group_notify 而不是 dispatch_group_wait 因为 dispatch_group_wait 会阻塞调用线程,直到组完成,而 dispatch_group_notify 将在组完成时调用一个 block ,不会在此期间阻塞调用线程。

关于ios - 如何知道在 iOS 中何时完成并行 HTTP 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26325472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com