Swift DispatchWorkItem未通知主线程
注意:这不是我已经看到的重复问题 关于DispatchWorkItem 我有如下代码Swift DispatchWorkItem未通知主线程,swift,multithreading,grand-central-dispatch,swift-playground,Swift,Multithreading,Grand Central Dispatch,Swift Playground,注意:这不是我已经看到的重复问题 关于DispatchWorkItem 我有如下代码 let dwi3 = DispatchWorkItem { print("start DispatchWorkItem \(Thread.isMainThread)") sleep(2) print("end DispatchWorkItem") } let myDq = DispatchQueue(label: "A cust
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)
它工作正常(我可以在控制台上看到notify),但不在主线程中启动DispatchWorkItem false
启动DispatchWorkItem false
结束DispatchWorkItem
通知
现在我尝试使用
dwi3.notify(queue: DispatchQueue.main) {
print("notify")
}
但它从不调用,我已经阅读并发现,若线程被阻塞,那个么情况就会发生。但是我已经在DispatchQueue.global()中执行dispatchworkItem
请任何人都能帮我这到底是怎么回事
如果您在操场上运行异步代码,则需要启用不确定执行,否则执行可能在回调执行之前结束
在操场中的代码中添加以下行:
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
执行此操作后,您将看到notify在主队列上正确执行。如果您在游乐场中运行异步代码,则需要启用不确定执行,否则执行可能在回调执行之前结束
在操场中的代码中添加以下行:
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
完成此操作后,您将看到notify在主队列上正确执行。您的代码在操场和应用程序中都适用于dwi3.notify(queue:DispatchQueue.main)
。你是如何运行代码的?很奇怪,我刚刚在游乐场中添加了代码,但是'dwi3.notify(queue:DispatchQueue.main)'不工作!!如果您在操场上跑步,您必须添加import PlaygroundSupport
和PlaygroundPage.current.needsIndefiniteExecution=true
@Paulw11我添加了屏幕快照sleep(80)
将阻止主队列。去掉它,添加我之前评论中的两行。你的代码对我来说适用于dwi3.notify(queue:DispatchQueue.main)
在游乐场和应用程序中。你是如何运行代码的?很奇怪,我刚刚在游乐场中添加了代码,但是'dwi3.notify(queue:DispatchQueue.main)'不工作!!如果您在操场上跑步,您必须添加import PlaygroundSupport
和PlaygroundPage.current.needsIndefiniteExecution=true
@Paulw11我添加了屏幕快照sleep(80)
将阻止主队列。去掉它,添加我之前评论中的两行。使用sleep
但不使用luckUsesleep
但不使用luckus