gpt4 book ai didi

ios - 如何等待第一次调度完成执行

转载 作者:行者123 更新时间:2023-11-29 01:07:47 24 4
gpt4 key购买 nike

我有2个这样的dispatch_async():

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
/* Code here */
}

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
/* Code here */
}

我希望第二个 dispatch 等到第一个 dispatch 完成他的执行。我怎样才能做到这一点?

提前致谢

最佳答案

我将按照复杂性递增的顺序给出一些解决方案:

1


最简单的方法是在同一个异步调用中包含两个代码块:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
// code block 1

// code block 2
}

2


如果您不知道它们何时运行,例如,代码块 1 在用户按下按钮时触发,而 代码块 2 在用户按下时运行按下另一个按钮,使用串行队列:

let serialQueue = dispatch_queue_create("mySerialQueue", DISPATCH_QUEUE_SERIAL)
dispatch_async(serialQueue) {
// code block 1
}
dispatch_async(serialQueue) {
// code block 2
}

3


如果您的代码块异步运行,例如首先调用网络服务进行身份验证,然后进行第二次调用以获取用户的个人资料,则必须实现等待:

let groupID = dispatch_group_create()

let task1 = session.dataTaskWithRequest(request1) { data, response, error in
// handle the response...

// Tell Grand Central Dispatch that the request is done
dispatch_group_leave(groupID)
}

let task2 = session.dataTaskWithRequest(request2) { data, response, error in
// handle the response...
}

dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)) {
dispatch_group_enter(groupID) // Tell GCD task1 is starting
task1.resume()

dispatch_group_wait(groupID, DISPATCH_TIME_FOREVER) // Wait until task1 is done
task2.resume()
}

4


任何更复杂的东西,我强烈建议你学习NSOpereationQueue .有一个 WWDC session在上面

关于ios - 如何等待第一次调度完成执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36141866/

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