【发布时间】:2017-09-29 15:43:44
【问题描述】:
注意:这不是我已经看到Dispatch group - cannot notify to main thread的重复问题
没有关于DispatchWorkItem
的答案我有如下代码
let dwi3 = DispatchWorkItem {
print("start DispatchWorkItem \(Thread.isMainThread)")
sleep(2)
print("end DispatchWorkItem")
}
let myDq = DispatchQueue(label: "A custom dispatch queue")
dwi3.notify(queue: myDq) {
print("notify")
}
DispatchQueue.global().async(execute: dwi3)
哪个工作正常(我可以在控制台上看到通知)而不是在主线程中 start DispatchWorkItem false
启动 DispatchWorkItem 假
结束 DispatchWorkItem
通知
现在我正在尝试使用通知主线程
dwi3.notify(queue: DispatchQueue.main) {
print("notify")
}
但它从不调用,我已阅读并发现如果线程被阻塞,则会发生这种情况。但我已经在DispatchQueue.global() 中执行DisptachWorkItem
请任何人都可以帮助我解决实际发生的情况?
【问题讨论】:
-
您的代码在游乐场和应用程序中都适用于
dwi3.notify(queue: DispatchQueue.main)。你是如何运行代码的 -
奇怪的是我刚刚在操场上添加了代码但是`dwi3.notify(queue: DispatchQueue.main)`没有工作!!
-
如果你在操场上跑步,你必须添加
import PlaygroundSupport和PlaygroundPage.current.needsIndefiniteExecution = true -
@Paulw11 我添加了屏幕截图
-
sleep(80)将阻塞主队列。摆脱它并添加我之前评论中的两行。
标签: swift multithreading grand-central-dispatch swift-playground