在閱讀了許多關於並行和併發的文章後,我仍然混淆了獲取數據的正確方法。例如,在我的項目中,我有一個用於獲取數據的按鈕。我的代碼如下所示。dispatch_async vs dispatch_sync獲取數據。 Swift
var array = [Int]()
func fetchData() {
....
....
response(objects: [object], error: NSError?) {
for object in objects {
array.append(object.number) // assume object.number return an Int
}
// confuse here. Should I use async here because I am worry if the user
// click the fetchData button more than one time, the append and make
// function will be happened at the same time. Or, is there anything I
// made a wrong assumption? I guess I need a serial operation. Correct?
dispatch_async(dispatch_get_main_queue()) {
makeCollectionView() // using the data in array
}
}
}
UPDATE
嘗試運行這段代碼。 10000-19999在0-9999之後運行。看起來第二個異步不會停止第一個異步來處理它的操作。
dispatch_async(dispatch_get_main_queue(), {() -> Void in
for i in 0 ..< 10000 {
print(i)
}
})
dispatch_async(dispatch_get_main_queue(), {() -> Void in
for i in 10000 ..< 20000 {
print(i)
}
})
精彩的答案來清除我的困惑。謝謝 –
Opps。還有一個問題。如果我調用dispatch_async(queue){makeCollectionView()}兩次,第二個makeCollectionView將在第一個或第二個會立即停止並立即運行後立即運行?如果它會立即停止第一個,是否有任何功能我可以把它作爲隊列中的第一個任務? –
更新了一些信息 –