Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift DispatchWorkItem未通知主线程_Swift_Multithreading_Grand Central Dispatch_Swift Playground - Fatal编程技术网

Swift 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

注意:这不是我已经看到的重复问题

关于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)
它工作正常(我可以在控制台上看到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
但不使用luckUse
sleep
但不使用luckus