Comment exécuter des tâches en parallèle avec Swift dans Swift Package

Pour une raison quelconque, je voulais installer Swift sur Ubuntu et essayer le traitement parallèle, mais cela n'a pas fonctionné, donc je vais vous montrer le problème et la solution.

environnement

L'environnement que j'ai exécuté est le suivant.

Chose que tu veux faire

--Je veux confirmer que le traitement est exécuté en parallèle pour le moment

Après enquête, il semble qu'il soit courant d'utiliser «Dispatchqueue». Il semble qu'il y ait aussi «Process» et «Thread», mais «Dispatchqueue» semble les rendre faciles à utiliser, alors j'ai décidé d'utiliser «Dispatchqueue» avec obéissance.

problème

Dans un premier temps, copiez le code du Site sorti après la recherche tel quel, et procédez comme suit Était là.

J'ai lancé swift package init --type executable pour générer divers fichiers et créé main.swift comme suit.

import Foundation

var value: Int = 2

DispatchQueue.main.async {
    for i in 0...3 {
        value = i
        print("\(value) ✴️")
    }
}

for i in 4...6 {
    value = i
    print("\(value) ✡️")
}

DispatchQueue.main.async {
    value = 9
    print(value)
}

Cependant, le résultat de l'exécution est

4 ✡️
5 ✡️
6 ✡️
0 ✴️
1 ✴️
2 ✴️
3 ✴️
9

Je voulais être

4 ✡️
5 ✡️
6 ✡️

Il est devenu. En d'autres termes, le traitement de la partie laissée à ** Dispatchqueue n'est pas du tout exécuté. ** **

Solution

J'avais une idée sur cette cause. Il exécutait ** le fichier seul **. De nombreux sites sont destinés à être utilisés dans les applications iPhone développées sur Mac. De plus, je me suis souvenu que j'avais déjà eu un problème similaire lors de l'exécution de Swift en tant que fichier unique. Voici les questions que j'ai postées à ce moment-là. [Swift] Timer ne peut pas être exécuté à plusieurs reprises (exécution régulière) Ceci est un problème car RunLoop, qui est automatiquement exécuté dans l'application, n'est pas exécuté lorsque le fichier Swift est exécuté seul, et il est résolu en ajoutant RunLoop.current.run () à la fin du programme. Fait. Comment ai-je ajouté RunLoop.current.run () à ce programme également?

import Foundation

var value: Int = 2

DispatchQueue.main.async {
    for i in 0...3 {
        value = i
        print("\(value) ✴️")
    }
}

for i in 4...6 {
    value = i
    print("\(value) ✡️")
}

DispatchQueue.main.async {
    value = 9
    print(value)
}

RunLoop.current.run()

Ensuite, la sortie était comme prévu.

Résumé

finalement

Si vous avez des erreurs ou des améliorations, veuillez laisser un commentaire ou une demande de modification. Merci beaucoup.

Recommended Posts

Comment exécuter des tâches en parallèle avec Swift dans Swift Package
[swift5] Comment spécifier la couleur en hexadécimal
Comment écraser les données Firebase avec Swift
Comment implémenter UICollectionView avec du code uniquement dans Swift
[Java] Comment exécuter des tâches régulièrement
[swift5] Comment exécuter le traitement lorsque tabBar est appuyé
Comment changer la couleur d'arrière-plan de la barre de navigation, etc. dans Swift UI
Comment trouver May'n dans XPath
Comment masquer la barre de défilement dans WebView
Comment exécuter JUnit dans Eclipse
Comment exécuter Ant dans Gradle
Comment apprendre JAVA en 7 jours
Comment obtenir des paramètres dans Spark
Comment installer Bootstrap dans Ruby
Comment utiliser InjectorHolder dans OpenAM
Comment installer jQuery dans Rails 6
Comment utiliser les classes en Java?
Comment nommer des variables en Java
Comment définir Lombok dans Eclipse
[Swift] Comment remplacer plusieurs chaînes
Comment exécuter l'IRB de Ruby (Ruby interactif)
Comment concaténer des chaînes avec Java
Comment installer Swiper in Rails
[Rails] Comment exécuter "rails db: create" etc. dans l'environnement de production EC2
Comment implémenter la fonctionnalité de recherche dans Rails
Comment implémenter le calcul de la date en Java
Comment implémenter le filtre de Kalman par Java
Prise en charge multilingue de Java Comment utiliser les paramètres régionaux
Comment changer le nom de l'application dans les rails
Comment utiliser le volume nommé dans docker-compose.yml
Comment filtrer JUnit Test dans Gradle
Comment insérer une vidéo dans Rails
[GCD] Principes de base de la programmation parallèle dans Swift
Comment normaliser le pied de page d'en-tête dans Thymeleaf
Comment inclure Spring Tool dans Eclipse 4.6.3?
Comment ajouter un fichier jar dans ScalaIDE
Comment faire une conversion de base en Java
Comment exécuter avec des commandes de langage de développement normales dans l'environnement de développement Docker
[Conception d'architecture] Comment exécuter SQL dans une application Java? 2WaySql contre ORM
Comment avoir des paramètres dans la méthode link_to
Comment utiliser Docker dans VSCode DevContainer
Comment utiliser MySQL dans le didacticiel Rails
Comment fixer la date système dans JUnit
Comment appliquer les conventions de codage en Java
Comment intégrer Janus Graph dans Java
[rails] Comment configurer le routage dans les ressources