Utilisez la fonction d'annulation de contexte dans Go pour annuler gracieusement une Goroutine en cours : utilisez le package de contexte pour créer un contexte avec délai d'attente. Utilisez defer pour annuler le contexte lorsque la fonction revient. Utilisez l'instruction select dans Goroutine pour écouter les événements d'annulation.
Comment utiliser la fonction d'annulation de contexte dans Goroutine ?
Dans Go, le mécanisme d'annulation de contexte nous permet d'annuler gracieusement Goroutine en cours lorsque certaines conditions sont remplies. Ceci est utile pour les tâches qui doivent s'exécuter en arrière-plan mais qui peuvent être annulées si nécessaire.
Scénarios d'utilisation
L'annulation de contexte est particulièrement adaptée aux scénarios suivants :
Détails de l'implémentation
Pour utiliser l'annulation de contexte, vous vous devez utiliser le packagecontext
. Comme indiqué ci-dessous :context
包。如下所示:
package main import ( "context" "fmt" "time" ) func main() { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() go func() { for { select { case <-ctx.Done(): fmt.Println("Context cancelled!") return default: fmt.Println("Working...") time.Sleep(1 * time.Second) } } }() time.Sleep(10 * time.Second) }
在这个示例中:
context.WithTimeout()
创建了一个新的上下文,它将超时 5 秒。defer cancel()
确保在 main 函数返回时取消上下文。ctx.Done()
通道收到信号时退出。实战案例
在真实的应用程序中,上下文取消可以用于以下任务:
注意事项
请注意以下注意事项:
context.Done()
通道来监听取消事件。defer cancel()
来在函数返回时取消上下文。select
rrreeecontext.WithTimeout()
crée un nouveau contexte qui expirera pendant 5 secondes.
defer Cancel()
garantit que le contexte est annulé au retour de la fonction principale. Le Goroutine exécutera une boucle infinie et se terminera lorsque le canal
ctx.Done()
recevra un signal. Le processus principal se terminera après 10 secondes et la Goroutine sera annulée à ce moment-là. Cas réel Dans les applications réelles, l'annulation de contexte peut être utilisée pour les tâches suivantes : Serveur Web : Annulez les gestionnaires HTTP lorsque l'utilisateur annule la requête. Connexion à la base de données : Annulez la requête de la base de données lorsque la connexion à la base de données n'est plus nécessaire. E/S de fichier : Annulez l'opération d'E/S lorsque le transfert de fichier doit être annulé. NotesVeuillez noter ce qui suit : Utilisez le canal
context.Done()
pour écouter les événements d'annulation. Vous devez utiliser
defer Cancel()
dans Goroutine pour annuler le contexte au retour de la fonction. Utilisez l'instruction
select
pour écouter les événements d'annulation dans Goroutine en cas de besoin.
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!