如何知道iOS中何时满足并行HTTP请求?

如何知道iOS中何时满足并行HTTP请求?,第1张

概述我需要在请求多个HTTP资源来收集一些数据后才运行一些代码. 我已经阅读了很多文档,我发现我应该使用GCD和调度组: >使用dispatch_group_create()创建一个组 >对于每个请求: >使用dispatch_group_enter()输入调度组 >运行请求 >收到回复时,请使用dispatch_group_leave()离开该组 >等待dispatch_group_wait() > 我需要在请求多个http资源来收集一些数据后才运行一些代码.

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

>使用dispatch_group_create()创建一个组
>对于每个请求:

>使用dispatch_group_enter()输入调度组
>运行请求
>收到回复时,请使用dispatch_group_leave()离开该组

>等待dispatch_group_wait()
>使用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将在组完成时调用一个块而不会在过渡期间阻塞调用线程. 总结

以上是内存溢出为你收集整理的如何知道iOS中何时满足并行HTTP请求?全部内容,希望文章能够帮你解决如何知道iOS中何时满足并行HTTP请求?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1043127.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存