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);
}
}
3 Réponses :
Si je ne me trompe pas, que cherchez-vous:
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")
}
Merci pour la réponse - est-il possible d'accéder à des paramètres dans différents "articles de la file d'attente"?
Actuellement Concurrence dans Swift Language Code> n'est pas là. C'est toujours une proposition de
Swift 5 code> sur Evolution Swift et voici le lien de Il: Proposition de la concurrence . Mais si cette fois vous développez des applications utilisant
cocoa code> /
cocoa tactile code> alors vous pouvez utiliser Dispatch , mais je pense que c'est la syntaxe laid. Je cherche toujours une concurrence dans
Swift Code> Langue P>
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) } }