7
votes

C # async attendre à Swift

Je joue actuellement avec des fermetures et des achèvements en chaînées dans Swift code>. Je connais assez avec le style C # code> async code> async code> et attendre code>, alors je me demandais comment "traduire" l'extrait suivant de C # code> à SWIFT code>.

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);
    }
}


0 commentaires

3 Réponses :


2
votes

Si je ne me trompe pas, que cherchez-vous:

Dispatch Serial Dispatch files d'attente: strong> p>

files d'attente série (également appelées files d'attente de distribution privée) exécuter une tâche à la fois dans l'ordre dans lequel ils sont ajoutés à la file d'attente. le Actuellement exécuter la tâche s'exécute sur un thread distinct (qui peut varier de la tâche à la tâche) qui est gérée par la file d'attente d'expédition. En série Les files d'attente sont souvent utilisées pour synchroniser l'accès à une ressource spécifique. Vous pouvez créer autant de files d'attente de série que nécessaire et chaque file d'attente fonctionne simultanément par rapport à toutes les autres files d'attente. En d'autre mots, si vous créez quatre files d'attente série, chaque file d'attente n'existe qu'une seule tâche à la fois mais jusqu'à quatre tâches pourraient toujours exécuter simultanément, un de chaque file d'attente. Pour plus d'informations sur la création de files d'attente série, Voir Créer des files d'attente d'expédition série. P> BlockQuote>

SWIFT 3: P>

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")
}


1 commentaires

Merci pour la réponse - est-il possible d'accéder à des paramètres dans différents "articles de la file d'attente"?



2
votes

Actuellement Concurrence dans Swift Language n'est pas là. C'est toujours une proposition de Swift 5 sur Evolution Swift et voici le lien de Il: Proposition de la concurrence . Mais si cette fois vous développez des applications utilisant cocoa / cocoa tactile alors vous pouvez utiliser Dispatch , mais je pense que c'est la syntaxe laid. Je cherche toujours une concurrence dans Swift Langue


0 commentaires

0
votes

Vous pouvez utiliser ce cadre pour Swift Coroutines - https://github.com/belozierov/swiftcoroutine

func awaitAPICall(_ url: URL) throws -> String? {
    let future = URLSession.shared.dataTaskFuture(for: url)
    let data = try future.await().data
    return String(data: data, encoding: .utf8)
}

func load(url: URL) {
    DispatchQueue.main.startCoroutine {
        let result1 = try self.awaitAPICall(url)
        let result2 = try self.awaitAPICall2(result1)
        let result3 = try self.awaitAPICall3(result2)
        print(result3)
    }
}


0 commentaires