gpt4 book ai didi

swift - 使用GCD在Swift中的另一个函数之后调用函数

转载 作者:可可西里 更新时间:2023-11-01 02:19:57 25 4
gpt4 key购买 nike

我有一个函数 A,它包含另外两个函数 B 和 C。在函数 A 内部,我需要在函数 B 完成后调用函数 C。我想我需要为此使用 Grand Central Dispatch 的 dispatch_group_notify,但不太确定如何使用它。我在函数 B 和 C 中调用异步方法。这是我的函数:

func A() {

func B() {

// Three asynchronous functions

}

func C() {

// More asynchronous functions that handle results from func B()

}

funcB()
funcC()
}

编辑:在 func B() 中,我有三个需要一段时间才能完成的异步函数。当我使用以下方法时,在 func B() 中的方法完全完成之前,仍在调用 func C()。我如何确保在调用第二个调度组之前它们已完全完成?

func A() {

var group = dispatch_group_create()

dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) { () -> Void in

// async function 1
// async function 2
// async function 3
}

dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), { () -> Void in

// async function

})

}

最佳答案

这是一个如何等待任务完成的示例:

func asyncTaskSimulation(delay: NSTimeInterval, completion: (NSTimeInterval) -> ()) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))), dispatch_get_global_queue(QOS_CLASS_UTILITY, 0)) {
completion(delay)
}
}

func A() {

func B(completion: () -> ()) {

print("Function B start")

let group = dispatch_group_create()

dispatch_group_enter(group)
asyncTaskSimulation(1.0) { (delay) in
print("First task after \(delay)s")
dispatch_group_leave(group)
}

dispatch_group_enter(group)
asyncTaskSimulation(2.0) { (delay) in
print("Second task after \(delay)s")
dispatch_group_leave(group)
}

dispatch_group_enter(group)
asyncTaskSimulation(0.5) { (delay) in
print("Third task after \(delay)s")
dispatch_group_leave(group)
}

dispatch_group_wait(group, DISPATCH_TIME_FOREVER)
completion()

print("Function B end")
}

func C() {
print("Function C start")
print("Whatever")
print("Function C end")
}

B() {
C()
}

}

A()

这是输出:

Function B start
Second task after 0.5s
First task after 1.0s
Second task after 2.0s
Function C start
Whatever
Function C end
Function B end

关于swift - 使用GCD在Swift中的另一个函数之后调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31444942/

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