首页 文章

等待具有异步操作的功能完成[关闭]

提问于
浏览
1

如何等待自身具有异步操作的函数完成?

让我给你举个例子:

Function_A 从图库中提取照片 . 使用提取闭包异步执行提取操作 .

我在 Function_B 中调用 Function_A 并且我想等待照片获取操作完成,然后继续我的代码 .

我尝试过的:

我've used dispatch group but it has not worked. I'也试图在同步块中调用 Function_A ,这也不成功 .

我该如何等待此操作完成?由于将提取操作运行到另一个队列,可能是这个问题吗?

Update

这就是我做的:

class imageFetch: NSObject{
    var theImage: PHAsset? = nil
    func Function_A(){
        let fetchOption = PHFetchOptions()         
        PHPhotoLibrary.requestAuthorization { (authStatus) in
            // It seems code will be executed asynchronously from here
            if authStatus == .authorized{
                let imageAsset = PHAsset.fetchAssets(with: .image, options: fetchOption)
            // Select image and save it in theImage
            // I know I can send a closure and run it here
            }
        }
    }
}

在另一个类中,我称之为该函数:

class edit: NSObject{
    funct Function_B(){
        var imageFetchIns = imageFetch()
        // I want below code to execute asynchronously
        imageFetchIns.Function_A()

        // Now I want to wait last operation to finish
    }
}

1 回答

  • 1

    没有代码很难理解发生了什么 . 如果你看看Using dispatch groups to wait for multiple web services,你会发现发生了什么 .

    否则,您可以开始使用 NSOperationNSOperationQueue . 实际上,如果您有两个操作,则可以在它们之间添加依赖关系 . 换句话说,您可以说操作只能在它所依赖的操作完成后才能开始执行 . 除此之外,操作还具有可取消的好处 . 例如,当您想要处理用户操作时很有用 . NSOperation and NSOperationQueue Tutorial in Swift将为您提供有关如何使用它们的非常好的介绍 .

    我想强调的是操作是一个操作(特别是当你将它子类化时)代表一个可以重复使用的自包含任务 - 在你的项目中或在不同的项目中 .

相关问题