gpt4 book ai didi

ios - 等待多个异步任务完成

转载 作者:行者123 更新时间:2023-11-29 04:08:18 25 4
gpt4 key购买 nike

我喜欢在应用程序获取新闻和视频时显示加载消息。目前,我有以下代码:

 [MBProgressHUD showHUDAddedTo:self.view animated:YES];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{

[self loadVersion];
[self loadFeaturedNews];
[self loadFeaturedVideo];

dispatch_async(dispatch_get_main_queue(), ^{

[MBProgressHUD hideHUDForView:self.view animated:YES];

[self dismissViewControllerAnimated:NO completion:nil];

});
});

我想仅在加载所有任务(新闻、视频)时关闭 Controller 并隐藏进度 View 。

最佳答案

如果您使用 AFNetworking,您可能需要查看 enqueueBatchOfHTTPRequestOperations 。我建议您引用 AFNetworking FAQ :

How can I wait for a group of requests to finish before processing them?

Use [enqueueBatchOfHTTPRequestOperationsWithRequests] or [enqueueBatchOfHTTPRequestOperations] to batch a series of requests together, specifying a callback for when all of the requests have finished. As mentioned in the question about waiting for completion blocks to finish, you may not want to set completion blocks on each individual operation, and instead access the response object properties directly in the batch completion block.


我发现 loadVersionloadFeaturedNewsloadFeaturedVideo 方法都在异步下载内容。如果您使用的是 NSURLConnection,我建议将它们更改为同步操作。解决方案的具体细节将根据您当前在这些例程中下载内容的方式而有所不同,例如如果您使用 NSURLConnection 方法 initWithRequest,则可以使用 sendSynchronousRequest .

就我个人而言,我倾向于将其与调度组或 NSOperationQueue 依赖项同时执行请求结合起来,但首先重点关注让它们同步运行。我实际上会使用 NSOperationQueue,这样我就可以轻松地将并发操作的数量限制为四个,或者类似的合理值。

顺便说一句,我根本不建议您更改问题中的代码。保留dispatch_async。我建议您修复 loadVersionloadFeaturedNewsloadFeaturedVideo 方法本身,以同步操作。

关于ios - 等待多个异步任务完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14838940/

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