gpt4 book ai didi

iphone - 等待多个异步网络调用,然后对其结果执行操作

转载 作者:行者123 更新时间:2023-12-01 17:26:35 26 4
gpt4 key购买 nike

处理多个异步 Web 调用的最佳实践是什么。

塞纳里奥:

我正在从一个 Web 服务的 JSON 提要中获取大量地址,同时查询 CLGeocoder 以从地址字符串中进行纬度/经度查找。然后,一旦我有了这两条信息,我就想执行一个 Action 。

在不将所有方法耦合到链接链中的情况下,最好的方法是什么?

最佳答案

等待同步任务:

我建议创建一个新的 NSOperationQueue ,将其配置为具有所需数量的线程,然后在该线程上启动操作。要等待它们完成,只需调用 waitUntilAllOperationsAreFinished方法。

例如:

NSOperationQueue* operationQueue = [[NSOperationQueue alloc] init];

// Add your tasks here

[operationQueue addOperationWithBlock:^{
// Long running task
}];

[operationQueue waitUntilAllOperationsAreFinished];

注意不要阻塞主线程,否则您的应用程序在加载时将变得无响应。

如果您需要比这更复杂的东西,您可以使用较低级别的 API dispatch_group_t对线程进行分组并等待它们。看看 this response进行更深入的解释。

等待已经异步的任务:

有时上述方法还不够,可能是因为您需要等待已经异步的任务(例如启用 GPS 或等待一些外部事件)。在这些情况下,您可以使用 信号量 .您必须非常小心错误处理和信号量,否则您可能会永远阻塞线程。
dispatch_semaphore_t sema = dispatch_semaphore_create(0);

[object performLongOperationAndDo:^{
dispatch_semaphore_signal(sema);
}];

dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
dispatch_release(sema);

更多 info about Obj-C semaphores .

除非必要,我会坚持 NSOperationQueue .

关于iphone - 等待多个异步网络调用,然后对其结果执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15434784/

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