DispatchWorkItem不通知主线程

时间:2017-09-29 07:14:22

标签: swift multithreading grand-central-dispatch swift-playground

注意:这不是重复的问题,我已经看过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)

哪个工作正常(我可以在控制台上看到通知)而不是主线程启动DispatchWorkItem false

  

启动DispatchWorkItem false

     

结束DispatchWorkItem

     

通知

现在我尝试使用

通知主线程
dwi3.notify(queue: DispatchQueue.main) {
    print("notify")

}

但它永远不会调用,我已阅读并发现如果Thread被阻止则会出现情况。但我已在DisptachWorkItem

中执行DispatchQueue.global()

请有人可以帮我解决实际情况吗?

enter image description here

1 个答案:

答案 0 :(得分:2)

如果您在游乐场中运行异步代码,则需要启用无限期执行,否则执行可能会在回调执行之前结束。

将以下行添加到操场中的代码中:

import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true

执行此操作后,您将看到通知在主队列上正确执行。