gpt4 book ai didi

ios - 等待异步 block 完成

转载 作者:行者123 更新时间:2023-11-29 10:35:49 25 4
gpt4 key购买 nike

例如,我有一个包含三个异步 block 的方法。每个 block 的结果都需要执行下一个 block 以获得最终的方法结果。所以,我正在寻找的是一个很好的 GCD 策略,让它们以严格的顺序执行并且没有死锁

__block id task1Result;    
__block id task2Result;
__block id finalResult;

[self startTask1:^(id result) { task1Result = result }]

[self startTask2:task1Result block:^(id result) { task2Result = result }]

[self startTask3:task2Result block:^(id result) { finalResult = result }]

UPD。我找到了解决方案:

dispatch_semaphore_t sem = dispatch_semaphore_create(0);

__block id task1Result;
__block id task2Result;
__block id finalResult;

[self startTask1:^(id result) {
task1Result = result;
dispatch_semaphore_signal(sem);
}];
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);

[self startTask2:task1Result block:^(id result) {
task2Result = result;
dispatch_semaphore_signal(sem);
}];
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);

[self startTask3:task2Result block:^(id result) { finalResult = result }];

但在我的案例中,我遇到了一些库方法的问题,这导致应用程序陷入僵局。 ><

最佳答案

创建一个串行调度队列,如下所述:
https://developer.apple.com/library/ios/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html

简而言之:

dispatch_queue_t queue;
queue = dispatch_queue_create("com.example.MyQueue", NULL);
dispatch_async(queue, ^{
printf("Do some work here.\n");
});
dispatch_async(queue, ^{
printf("When finished do next task.\n");
});

请注意,您必须自己处理队列。

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

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