2016-12-01 1 views
4

Ich spiele derzeit mit Schließungen und verketteten Komplettierungen in . Ich bin ziemlich vertraut mit dem C# Stil von async und await, also fragte ich mich, wie man das folgende Schnipsel von C# zu "übersetzt".C# Async erwarten in Swift

public async Task SomeFunction(string inputString) 
{ 
    var first = await GetFirstVariableAsync(inputString); 
    var second = await GetSecondVariableAsync(first); 

    if (second == "some condition") 
    { 
     first = await GetFirstVariableAsync(inputString); 
     var second = await GetSecondVariableAsync(first); 
    } 
} 

Hat Swift hat ein ähnliches Konstrukt wie await, für eine Funktion zu warten, um zu vollenden, ohne Nest Blöcke mehrere Fertigstellung zu haben?

Danke

Antwort

1

Wenn ich nicht zu verkennen, was suchen Sie ist:

Serien Versand Queues:

Serien Warteschlangen (auch als private Dispatch-Warteschlangen bekannt) Führen Sie eine Aufgabe gleichzeitig in der Reihenfolge aus, in der sie zur Warteschlange hinzugefügt werden. Der aktuell ausgeführte Task wird in einem bestimmten Thread ausgeführt (der von Task zu Task variieren kann), der von der Dispatch-Warteschlange verwaltet wird. Serielle Warteschlangen werden häufig verwendet, um den Zugriff auf eine bestimmte Ressource zu synchronisieren. Sie können so viele serielle Warteschlangen erstellen, wie Sie benötigen, und jede Warteschlange arbeitet gleichzeitig mit allen anderen Warteschlangen. Wenn Sie in anderen Wörtern vier serielle Warteschlangen erstellen, führt jede Warteschlange jeweils nur einen Task gleichzeitig aus, aber bis zu vier Tasks können gleichzeitig ausgeführt werden, einer aus jeder Warteschlange. Informationen zum Erstellen serieller Warteschlangen finden Sie unter Erstellen serieller Dispatchwarteschlangen.

Swift 3:

let serialQueue = DispatchQueue(label: "serialQueue") 

serialQueue.sync { 
    print("running first task") 
} 

serialQueue.sync { 
    print("I will wait the first task and then I'll do my own task") 
} 
+0

Danke für die Antwort - ist es möglich, Parameter in verschiedenen "Warteschlange Elemente" zugreifen? – nor0x

0

Derzeit concurrency in Swift language ist noch nicht da. Es ist immer noch ein Vorschlag für Swift 5 auf Swift evolution und hier ist der Link davon: concurrency proposal. Aber wenn dieses Mal Sie Anwendungen unter Verwendung Cocoa/ dann entwickeln, können Sie Dispatch verwenden, aber ich denke, dass es hässliche Syntax hat. Ich bin immer noch auf der Suche nach Nebenläufigkeit in Swift Sprache