我正在嘗試下面的代碼在操場上,但它似乎沒有按照我的預期工作。如何在Swift中處理組等待結果3
兩個group_async操作總共導致我的Mac上約5秒到6秒。
- 當我將超時時間設置爲DispatchTime.now()+ 10時,會同時打印「測試返回」和「完成」。
- 當我將超時時間設置爲DispatchTime.now()+ 1(某些值使組超時)時,除了兩個group_async操作中的打印代碼外,不會打印任何內容。
我想要的是暫停組並在超時時做一些清理工作,並在組成功完成時進行其他一些操作。任何建議表示讚賞。謝謝。
import Dispatch
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
let queue = DispatchQueue.global(qos: .utility)
func test() {
let group = DispatchGroup()
__dispatch_group_async(group, queue) {
var a = [String]()
for i in 1...999 {
a.append(String(i))
print("appending array a...")
}
print("a finished")
}
__dispatch_group_async(group, queue) {
var b = [String]()
for i in 1...999 {
b.append(String(i))
print("appending array b...")
}
print("b finished")
}
let result = group.wait(timeout: DispatchTime.now() + 10)
if result == .timedOut {
group.suspend()
print("timed out")
}
print("test returns")
}
queue.async {
test()
print("done")
}
@Rob我只試過這種在操場上。你的意思是在這兩種情況下行爲會有所不同嗎? – Evan
謝謝你的建議。我會稍後在我的應用程序中嘗試。 – Evan
嘿,@Rob。我已經在一個新的應用程序中測試過了。超時代碼被執行。現在,我會小心使用操場來測試由於不一致導致的GCD行爲。 – Evan