0

Hinweis Benachrichtigung: Diese nicht Frage Duplikat ist habe ich schon gesehen Dispatch group - cannot notify to main threadDispatchWorkItem nicht Hauptthread

Es gibt nichts, antwortete etwa DispatchWorkItem

I-Code haben wie unter

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) 

Welche ist funktioniert einwandfrei (ich kann notify auf der Konsole sehen) und nicht im Hauptthread start DispatchWorkItem false

Start DispatchWorkItem falsch

Ende DispatchWorkItem

benachrichtigt

Jetzt habe ich auf Hauptthread zu benachrichtigen versuchen

dwi3.notify(queue: DispatchQueue.main) { 
    print("notify") 

} 

verwenden, aber es ruft nie, ich habe gelesen und gefunden, dass, wenn Thread blockiert ist, Situation auftritt s. aber ich bin bereits ausgeführt DisptachWorkItem in DispatchQueue.global()

Bitte Jeder kann mir dabei helfen, was eigentlich los ist?

enter image description here

+0

Ihr Code funktioniert für mich mit 'dwi3.notify (queue: DispatchQueue.main)' sowohl auf einem Spielplatz und in einer App. Wie läuft es mit dem Code – Paulw11

+0

Es ist seltsam, ich habe gerade Code in Spielplatz hinzugefügt, aber 'dwi3.notify (Warteschlange: DispatchQueue.main)' funktioniert nicht !! –

+0

Wenn Sie auf einem Spielplatz laufen, müssen Sie 'Import PlaygroundSupport' hinzufügen und ' PlaygroundPage.current.needsIndefiniteExecution = true' – Paulw11

Antwort

1

Wenn Sie auf einem Spielplatz asynchronen Code ausgeführt werden, dann müssen Sie unbestimmte Ausführung ermöglichen, endet die Ausführung kann sonst vor die Rückrufe ausführen.

Fügen Sie die folgenden Zeilen Code auf dem Spielplatz:

import PlaygroundSupport 
PlaygroundPage.current.needsIndefiniteExecution = true 

Sobald Sie dies tun, werden Sie sehen, dass das ausführt, korrekt auf der Hauptwarteschlange benachrichtigen.