[英]Timing of async callback
我想對來自Internet下載請求的完成塊的時間安排有更好的了解。 在這種情況下,firebase。 以下代碼示例不執行任何操作,但是它說明了我的問題。
假設我在keysArray中有100個值,那么將有100個異步請求發送到firebase,並且完成塊將被執行100次
func someFunction() {
for keys in keysArray {
loadDataFromFirebaseWithKey(completionHandler: { (success, data) in
print(data)
// Task A Some length for loop
for i in 0...10000 {
print("A")
}
// Task B
for i in 10001...20000 {
print("B")
}
})
// Task C
for i in 20001...30000 {
print("C")
}
// Task D
for i in 30001...40000 {
print("D")
}
}
// Task E
for i in 40001...50000 {
print("E")
}
// Task F
for i in 50001...60000 {
print("F")
}
}
我使用如此大的for循環的原因是為了說明一些耗時/非異步的過程。 這是我想知道的三種情況
假設程序在任務C途中,在進入完成塊以完成A和B之前,它是否完成了C和D?
假設程序是否在任務E的一半處完成,它在進入完成塊以執行A和B之前是否完成了E和F?
如果任務同時運行,它們可能會相互替代,成為一個活躍的事物,並且鑒於4s以來的所有iOS設備都具有多個內核,它們可能會真正並發進行。 沒有理由在中斷時任何特定的for
循環都將在任何特定點。
如果Firebase在串行隊列中安排其完成處理程序,則所有處理程序都不會重疊。
如果Firebase在主隊列上安排其完成處理程序,而您是從主隊列中調用它的,則其完成處理程序和您的調用代碼都不會相互重疊。
所以,直接回答:
如果Firebase在與您調用的隊列相同的隊列上調度完成處理程序,並且該隊列是串行的,則如果所有內容都是主隊列鏈接,則幾乎總是表示“是”。 否則沒有。
相同的答案。 for
循環沒有特殊的並發魔術。 它們與任何其他代碼一樣完全可以使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.