- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是交易。我正试图在树上行走。但想同时这样做。因此,每次我走到一个节点时,我都需要同时走到它的所有节点,依此类推。但。我不想等待整个 DispatchGroup 完成才能得到结果,因为这就像 Big O 中最坏的情况。相反,我想取消所有其他 DispatchWorkItems 并在成功的 DispatchWorkItems 中为它们保留组。尝试通过计算已结束的任务来做到这一点。显然我做错了什么或者误解了如何使用它。下面的代码只是为了示例和测试这个想法而编写的。考虑现实世界的情况是,在 DispatchWorkItem 中,您可以递归调用树当前节点的另一个 handle
函数。
func handle(completion: @escaping (Int) -> Void) {
var result: Int = 0
var count = 7
let group = DispatchGroup()
let queue = DispatchQueue(label: "q", attributes: .concurrent)
var items = [DispatchWorkItem]()
let item1 = DispatchWorkItem(flags: .inheritQoS) {
for _ in 0...1000 { continue }
count -= 1
group.leave()
print("left 1")
}
let item2 = DispatchWorkItem(flags: .inheritQoS) {
for _ in 0...2000 { continue }
count -= 1
group.leave()
print("left 2")
}
let item3 = DispatchWorkItem(flags: .inheritQoS) {
for _ in 0...6000 { continue }
count -= 1
group.leave()
print("left 3")
}
let item4 = DispatchWorkItem(flags: .inheritQoS) {
for _ in 0...3000 { continue }
result = 42
items.forEach { $0.cancel() }
for _ in 0..<count {
group.leave()
}
print("ok; left 4")
}
let item5 = DispatchWorkItem(flags: .inheritQoS) {
for _ in 0...50000 { continue }
count -= 1
group.leave()
print("left 5")
}
let item6 = DispatchWorkItem(flags: .inheritQoS) {
for _ in 0...6000 { continue }
count -= 1
group.leave()
print("left 6")
}
let item7 = DispatchWorkItem(flags: .inheritQoS) {
for _ in 0...8000 { continue }
count -= 1
group.leave()
print("left 7")
}
items.append(item1)
items.append(item2)
items.append(item3)
items.append(item4)
items.append(item5)
items.append(item6)
items.append(item7)
for item in items {
group.enter()
queue.async(execute: item)
}
group.notify(queue: queue) {
return
}
}
test() {
handle { result in
print(result)
}
}
最佳答案
您无法同时从多个线程读取和写入计数变量。您需要在计数上设置互斥锁。您尝试从多个线程访问和/或更改计数时遇到不稳定的情况。另外,您应该将其设计为根本不需要计数。
关于ios - Swift 3 DispatchGroup单次成功DispatchWorkItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45807520/
当用户在 uisearchbar 中键入文本时,我正在过滤一个数组,但问题是我有一个警报处理程序,每次调用委托(delegate)时都会触发该处理程序,但我希望警报出现只有一次没有多次......代码
我有一个 HTML5、jQuery 卡片内存游戏,您可以通过一次翻转两张卡片来匹配卡片。我想在两张卡片匹配时播放动画,但因为我已经将 "transform: rotationY(180deg)" 应用
在我的 Jboss-EAP-6.1 中,我部署了一个名为 'myRealWebApp.war' 的 .war我可以使用此网址访问我的应用程序 - http://mywebsite.com/myReal
我是一名优秀的程序员,十分优秀!