我正在尝试下面的代码在操场上,但它似乎没有按照我的预期工作。如何在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