2017-10-31 7 views
2

Ich benutze ein sehr einfaches Swift-Projekt mit SPM erstellt, wo es Alamofire enthält.Swift warten auf Abschluss Thread zu beenden

main.swift:

import Alamofire 

Alamofire.request("https://google.com").responseString(queue: queue) { response in 
      print("\(response.result.isSuccess)") 
} 

Der Verschluss nie, wenn ich eine Sperre verwenden nicht ausgeführt wird. Gibt es eine Möglichkeit, anzuweisen, vor dem Beenden auf alle Threads oder diesen bestimmten Thread zu warten?

Ich bin mir bewusst, dass dies leicht mit Playgrounds erreicht werden kann.

Antwort

2

einfachste Weg für eine Asynchron-Aufgabe zu warten, ist eine Semaphore zu verwenden:

let semaphore = DispatchSemaphore(value: 0) 

doSomethingAsync { 
    semaphore.signal() 
} 

semaphore.wait() 

// your code will not get here until the async task completes 

Alternativ, wenn Sie für mehrere Aufgaben darauf warten, können Sie eine Dispatch-Gruppe verwenden:

let group = DispatchGroup() 

group.enter() 
doAsyncTask1 { 
    group.leave() 
} 

group.enter() 
doAsyncTask2 { 
    group.leave() 
} 

group.wait() 

// You won't get here until all your tasks are done 
0

Für Swift 3

let group = DispatchGroup() 
group.enter() 
DispatchQueue.global(qos: .userInitiated).async { 
    // Do work asyncly and call group.leave() after you are done 
    group.leave() 
} 
group.notify(queue: .main, execute: { 
    // This will be called when block ends    
}) 

Dieser Code wird hilfreich sein, wenn Sie nach etwas Code ausführen müssen meine Aufgabe ist erledigt.

Bitte fügen Sie Details zu Ihrer Frage hinzu, dann kann ich Ihnen mehr helfen.

Verwandte Themen