gpt4 book ai didi

swift - 如何保证Grand Central Dispatch中的一项功能接连运行?

转载 作者:行者123 更新时间:2023-11-30 10:41:22 25 4
gpt4 key购买 nike

基本上,我想在运行依赖于上传图像的其他功能之前上传一些图像。我想我可能对 GCD 是什么/线程如何工作有误解。我希望功能 1 和 2 在上传图像后发生。它们执行起来都很快,但严重依赖上传图像才能完成。也许我不应该使用 GCD(因为我想实现一个等待指示器)?我似乎无法让它正确执行

        if goToHome {
DispatchQueue.global().async {
DispatchQueue.main.sync {
self.uploadImages() // Uploads the images, takes a good amount of time to execute
function1()
function2()


}
}

函数 1 和 2 在上传图像完成之前继续运行,因为它们的执行时间要少得多。

最佳答案

Swift 中的基本模式是在后台线程上执行上传等工作,然后在主线程上调用完成函数,并根据上传是否成功完成继续工作。

通常,如果您需要对用户界面执行某些操作,例如设置进度指示器(必须在主线程上进行),您将回调主线程。

所以像这样:

func uploadInBackground(_ images: [Image], completion: @escaping (_ success: Bool) -> Void) {
DispatchQueue.global(qos: .background).async {
var success = true

// upload the images but stop on any error
for image in images {
success = uploadImage(image) // upload your images somehow

guard success else { break }
}

DispatchQueue.main.async {
completion(success)
}
}
}

func mainThreadUploader() {
let images = [Image(), Image()] // get your images from somewhere

// we are on the main thread where UI operations are ok, so:
startProgressIndicator()

uploadInBackground(images) { success in
// this callback is called on the main thread, so:
stopProgressIndicator()

guard success else { return }

// images uploaded ok, so proceed with functions that depend on
// the upload(s) completing successfully:
function1()
function2()
}
}

关于swift - 如何保证Grand Central Dispatch中的一项功能接连运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56729065/

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