Maison développement back-end Golang Partager un framework Taskflow développé sur la base de Golang

Partager un framework Taskflow développé sur la base de Golang

Apr 14, 2023 pm 01:53 PM

Go est un langage de programmation populaire connu pour son efficacité, sa simplicité et sa facilité d'extensibilité. En même temps, c'est également un langage adapté à la programmation simultanée. Ses mécanismes Goroutine et Channel rendent la programmation simultanée extrêmement simple. Dans cet article, je présenterai un framework Taskflow développé sur la base de Golang. Dans ce framework, nous pouvons écrire un processus de tâche très facilement. Ci-dessous, je présenterai brièvement son utilisation :

API Taskflow

Il existe trois API importantes dans le framework Taskflow, qui sont :

  1. NewTaskflow() : utilisée pour déclarer un nouveau processus de tâche.
  2. AddTask() : utilisé pour ajouter une nouvelle tâche au processus de tâche. Cette méthode nécessite généralement trois paramètres : le nom de la tâche, le code de la tâche et la fonction d'exécution de la tâche.
  3. Start() : utilisé pour démarrer le processus de tâche.

Jetons un coup d'œil à l'exemple le plus simple :

package main

import (
    "fmt"
    "github.com/trustasia-com/taskflow"
)

func main() {
    // 声明一个新的Taskflow
    tf := taskflow.NewTaskflow()
    // 添加一个名为“hello”的任务,并将任务代码设为1
    tf.AddTask("hello", 1, func(tf *taskflow.Taskflow) error {
        fmt.Println("Hello, Taskflow")
        return nil
    })
    // 启动任务流程
    tf.Start()
}
Copier après la connexion

Grâce à l'exemple ci-dessus, nous pouvons voir que nous déclarons d'abord un nouveau processus de tâche, puis ajoutons une tâche nommée "hello", et enfin le démarrons Flux de tâches. Dans le code de la tâche, nous générons simplement un message. Exécutez le programme et le résultat est :

Hello, Taskflow
Copier après la connexion

Bien que cet exemple soit simple, il nous donne une compréhension de base du concept et de l'utilisation de Taskflow.

Tâches dans Taskflow

Dans Taskflow, chaque tâche est une unité d'exécution indépendante et peut être exécutée l'une après l'autre dans un ordre prédéterminé. Chaque tâche a un nom unique et un code d'exécution. Dans son code d'exécution, Task peut accéder à l'objet Taskflow, afin de connaître l'état d'exécution des autres tâches et le code qui appelle les autres tâches. Voyons ensuite comment utiliser Taskflow pour créer un processus de tâches simple.

package main

import (
    "fmt"
    "github.com/trustasia-com/taskflow"
)

func main() {
    // 声明一个新的Taskflow
    tf := taskflow.NewTaskflow()

    // 添加三个名称为“t1”、“t2”和“t3”的任务
    tf.AddTask("t1", 1, func(tf *taskflow.Taskflow) error {
        fmt.Println("This is Task 1")
        return nil
    })
    tf.AddTask("t2", 2, func(tf *taskflow.Taskflow) error {
        fmt.Println("This is Task 2")
        return nil
    })
    tf.AddTask("t3", 3, func(tf *taskflow.Taskflow) error {
        fmt.Println("This is Task 3")
        return nil
    })

    // 在Taskflow中,Task可以通过其名称进行引用
    // 这里我们添加了一些依赖
    tf.Link("t1", "t2")
    tf.Link("t2", "t3")

    // 启动任务流程
    tf.Start()
}
Copier après la connexion

Dans le code ci-dessus, nous avons utilisé trois tâches et les avons ajoutées dans l'ordre. Dans le code d'exécution de chaque tâche, nous affichons le nom de la tâche.

Contrôle du processus de tâche

Dans le processus de tâche Taskflow, nous pouvons également personnaliser la séquence d'exécution des tâches et leurs interdépendances en contrôlant les pilotes entre les tâches. Ceci peut être réalisé grâce à la méthode Link dans Taskflow. La méthode Link accepte deux paramètres : le nom de la tâche source et le nom de la tâche cible. Par exemple, dans l'extrait de code suivant, la tâche 2 et la tâche 3 sont ajoutées en tant que post-actions une fois la tâche 1 terminée :

...
// 启动任务流程
tf.Start()
// 添加一个名称为“t4”的Task,并将其添加到“t1”之后
tf.AddTask("t4", 4, func(tf *taskflow.Taskflow) error {
    fmt.Println("This is Task 4")
    return nil
})
tf.Link("t1", "t4")
tf.Link("t4", "t2")
tf.Link("t4", "t3")
// 停止任务流程
tf.Stop()
...
Copier après la connexion

Dans ce code, nous avons ajouté une nouvelle tâche (tâche 4) et l'avons passée en tant que post-opération après la tâche 1. . Par conséquent, une fois la tâche 1 terminée, la tâche 4 sera exécutée entièrement en parallèle. Nous avons également lié Task2 et Task3 après Task4 pour garantir qu'elles démarrent immédiatement après l'exécution de Task4.

Résumé

Cet article présente le framework Taskflow et son utilisation simple. Bien que l'API fournie par Taskflow soit très simple et pratique, elle suffit à nous aider à réaliser la plupart des opérations de processus de tâches. Dans les applications pratiques, Taskflow peut nous aider à définir et à contrôler facilement les processus de tâches, améliorant ainsi considérablement la maintenabilité et l'évolutivité des applications.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

GO Language Pack Import: Quelle est la différence entre le soulignement et sans soulignement? GO Language Pack Import: Quelle est la différence entre le soulignement et sans soulignement? Mar 03, 2025 pm 05:17 PM

GO Language Pack Import: Quelle est la différence entre le soulignement et sans soulignement?

Comment mettre en œuvre le transfert d'informations à court terme entre les pages du cadre Beego? Comment mettre en œuvre le transfert d'informations à court terme entre les pages du cadre Beego? Mar 03, 2025 pm 05:22 PM

Comment mettre en œuvre le transfert d'informations à court terme entre les pages du cadre Beego?

Comment écrire des objets et des talons simulés pour les tests en Go? Comment écrire des objets et des talons simulés pour les tests en Go? Mar 10, 2025 pm 05:38 PM

Comment écrire des objets et des talons simulés pour les tests en Go?

Comment convertir la liste des résultats de la requête MySQL en une tranche de structure personnalisée dans le langage Go? Comment convertir la liste des résultats de la requête MySQL en une tranche de structure personnalisée dans le langage Go? Mar 03, 2025 pm 05:18 PM

Comment convertir la liste des résultats de la requête MySQL en une tranche de structure personnalisée dans le langage Go?

Comment puis-je utiliser des outils de traçage pour comprendre le flux d'exécution de mes applications GO? Comment puis-je utiliser des outils de traçage pour comprendre le flux d'exécution de mes applications GO? Mar 10, 2025 pm 05:36 PM

Comment puis-je utiliser des outils de traçage pour comprendre le flux d'exécution de mes applications GO?

Comment puis-je définir des contraintes de type personnalisé pour les génériques en Go? Comment puis-je définir des contraintes de type personnalisé pour les génériques en Go? Mar 10, 2025 pm 03:20 PM

Comment puis-je définir des contraintes de type personnalisé pour les génériques en Go?

Comment rédigez-vous des tests unitaires en Go? Comment rédigez-vous des tests unitaires en Go? Mar 21, 2025 pm 06:34 PM

Comment rédigez-vous des tests unitaires en Go?

Comment écrire des fichiers dans GO Language de manière pratique? Comment écrire des fichiers dans GO Language de manière pratique? Mar 03, 2025 pm 05:15 PM

Comment écrire des fichiers dans GO Language de manière pratique?

See all articles