2016-10-20 2 views
1

Ich lerne gerade über Rückrufe in Swift und versuche, etwas sehr grundlegendes zu verstehen. Ich kann nirgendwo eine klare Antwort finden.Sind Funktionen, die automatisch geschlossen werden, asynchron?

Ich verstehe, dass, wenn ich tue:

URLSession.dataTask(with: URLRequest) { data, response, error in }

es wird eine asynchrone Netzwerkanfrage durchführt, nach dem ich meine eigenen Arbeit mit dem Ergebnis, in den Abschluss-Handler zu tun.

Lassen Sie uns jedoch sagen, dass ich meine eigene Funktion schreiben möchte, die eine Art Hintergrundaufgabe ausführt. Wäre es einfach genug, eine Schließung als Parameter für die Funktion (die im Funktionskörper aufgerufen wird) zu haben, damit die Funktion asynchron arbeitet? Oder müsste ich GCD-Methode (n) auch im Funktionskörper aufrufen?

+0

Ja, Sie müssen sicherstellen, dass es sich um einen anderen Thread handelt; http://stackoverflow.com/questions/24056205/how-to-use-background-thread-in-swift. Wenn Sie eine Funktion von einem Parameter aufrufen, wird sie nicht asynchron. http://stackoverflow.com/questions/748175/asynchronous-vs-synchronous-execution-what-does-it-really-mean –

+0

, um Ihren Code im Hintergrund arbeiten müssen Sie GCD verwenden. .dataTask senden eine asynchrone Anfrage standardmäßig –

Antwort

3

Ein Rückrufparameter hat keine Auswirkungen auf die Implementierung der Methode. Wenn Sie es asynchron machen möchten, müssen Sie explizite Schritte ausführen, um es asynchron zu machen. Dies kann unter Verwendung von zentralem Zentraldispatch, Operationswarteschlangen oder dem Aufruf anderer asynchroner Methoden erfolgen.

Verwandte Themen