DispatchWorkItem 不通知主线程

DispatchWorkItem not notifying 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

start DispatchWorkItem false

end DispatchWorkItem

notify

现在我尝试使用

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

}

但它从不调用,我已经阅读并发现如果线程被阻塞,就会出现这种情况。但我已经在 DispatchQueue.global()

中执行 DisptachWorkItem

请任何人都可以帮我解决这个到底是怎么回事?

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

将以下行添加到您在 playground 中的代码中:

import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true

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