gpt4 book ai didi

IOS递归分派(dispatch)异步

转载 作者:行者123 更新时间:2023-11-28 21:50:22 25 4
gpt4 key购买 nike

我正在使用带有 ARC 的 xcode6。

我有一个包含登录信息的登录 Storyboard。我有一个希望在后台(其他线程)运行的登录过程。太酷了,我正在使用:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
// Call Async URL
});

但我遇到了一些困难,主要是因为我必须调用多个异步 URL。

所以没问题,我尝试实现这个: enter image description here

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
// Call Async URL withcallback block
// In block
dispatch_semaphore_signal(sema);
});
// Wait 30 seconds max to finish
dispatch_semaphore_wait(sema, dispatch_time(DISPATCH_TIME_NOW, 30*10^9));

sema = dispatch_semaphore_create(0);
// check if is ok to continue

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
// Call Async URL withcallback block
// In block
dispatch_semaphore_signal(sema);
});
// Wait 30 seconds max to finish
dispatch_semaphore_wait(sema, dispatch_time(DISPATCH_TIME_NOW, 30*10^9));
});

可以这样做还是有其他方法?

编辑:我必须做的不仅仅是 2 个调用,递归我所有的异步调用会很麻烦。

最佳答案

我不确定您是否需要将事情复杂化到这种程度。您正在 dispatch_async 到同一个队列,并且您表明您正在进行的调用本身是异步的。

假设 //Call Async URL withcallback block 表示您正在进行的调用也是异步的,并采用在完成时执行的回调 block ,您上面的所有源代码都可以替换为以下内容:

[<some async call> block:^{
[<some other async call> block:^{
}];
}];

关于IOS递归分派(dispatch)异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28587921/

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