簡體   English   中英

斯威夫特等待關閉完成

[英]Swift wait for closures to finish

我有異步任務的問題。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
    self.loadRemote {
        log.debug("completed remote data")
    }
    self.loadLocal {
        log.debug("completed local data")
    }
    self.loadAdmin {
        log.debug("completed admin data")
    }
    dispatch_async(dispatch_get_main_queue()) {
        log.debug("called completed data")
        completed()
    }
}

以下代碼無法正常工作。 它按以下順序調用:

completed local data
called completed data
completed remote data

這不是我所期望的。 您可以想象我想要訂單:“本地”,“遠程”,最后“稱為已完成”。

謝謝!

這就是Dispatch Groups的用途。 你在開始之前叫“輸入”,在你完成之后“離開”。 然后,您可以添加通知,該通知是在所有操作完成后排隊的塊。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
    let group = dispatch_group_create()

    dispatch_group_enter(group)
    self.loadRemote {
        log.debug("completed remote data")
        dispatch_group_leave(group)
    }

    dispatch_group_enter(group)
    self.loadLocal {
        log.debug("completed local data")
        dispatch_group_leave(group)
    }

    dispatch_group_enter(group)
    self.loadAdmin {
        log.debug("completed admin data")
        dispatch_group_leave(group)
    }

    dispatch_group_notify(group, dispatch_get_main_queue()) {
        log.debug("called completed data")
        completed()
    }
}

鑒於所有的load...方法似乎都是異步的,這里似乎沒有任何原因可以用於初始dispatch_async (但是它們可能比當前隊列更耗時)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM