Swift 等待关闭线程完成
Swift wait for closure thread to finish
我正在使用一个非常简单的 swift 项目,该项目是使用 SPM 创建的,其中包含 Alamofire。
main.swift:
import Alamofire
Alamofire.request("https://google.com").responseString(queue: queue) { response in
print("\(response.result.isSuccess)")
}
如果我不使用锁,则永远不会执行闭包。
有没有办法指示在退出之前等待所有线程或特定线程?
我知道这可以使用 Playgrounds 轻松实现。
等待异步任务的最简单方法是使用信号量:
let semaphore = DispatchSemaphore(value: 0)
doSomethingAsync {
semaphore.signal()
}
semaphore.wait()
// your code will not get here until the async task completes
或者,如果您正在等待多个任务,您可以使用调度组:
let group = DispatchGroup()
group.enter()
doAsyncTask1 {
group.leave()
}
group.enter()
doAsyncTask2 {
group.leave()
}
group.wait()
// You won't get here until all your tasks are done
对于Swift 3
let group = DispatchGroup()
group.enter()
DispatchQueue.global(qos: .userInitiated).async {
// Do work asyncly and call group.leave() after you are done
group.leave()
}
group.notify(queue: .main, execute: {
// This will be called when block ends
})
当您需要在完成某些任务后执行某些代码时,这段代码会很有帮助。
请添加您的问题的详细信息,然后我可以为您提供更多帮助。
我正在使用一个非常简单的 swift 项目,该项目是使用 SPM 创建的,其中包含 Alamofire。
main.swift:
import Alamofire
Alamofire.request("https://google.com").responseString(queue: queue) { response in
print("\(response.result.isSuccess)")
}
如果我不使用锁,则永远不会执行闭包。 有没有办法指示在退出之前等待所有线程或特定线程?
我知道这可以使用 Playgrounds 轻松实现。
等待异步任务的最简单方法是使用信号量:
let semaphore = DispatchSemaphore(value: 0)
doSomethingAsync {
semaphore.signal()
}
semaphore.wait()
// your code will not get here until the async task completes
或者,如果您正在等待多个任务,您可以使用调度组:
let group = DispatchGroup()
group.enter()
doAsyncTask1 {
group.leave()
}
group.enter()
doAsyncTask2 {
group.leave()
}
group.wait()
// You won't get here until all your tasks are done
对于Swift 3
let group = DispatchGroup()
group.enter()
DispatchQueue.global(qos: .userInitiated).async {
// Do work asyncly and call group.leave() after you are done
group.leave()
}
group.notify(queue: .main, execute: {
// This will be called when block ends
})
当您需要在完成某些任务后执行某些代码时,这段代码会很有帮助。
请添加您的问题的详细信息,然后我可以为您提供更多帮助。