Maison > Article > développement back-end > Comment arrêter gracieusement les Goroutines après un temps défini en utilisant le contexte ?
Dans les tests de charge, où de nombreux appels HTTP sont orchestrés dans les goroutines, cela devient crucial pour contrôler la durée d’exécution de ces routines. Cela permet aux utilisateurs de terminer le test de charge à une heure prédéfinie.
Une tentative courante pour y parvenir consiste à utiliser des goroutines pour surveiller les durées de time.Sleep() et diffuser les signaux de fin. via les canaux. Bien que cette méthode puisse suffire dans certains cas, elle échoue lorsque les goroutines continuent d'effectuer des appels HTTP en dehors de la goroutine principale.
Go 1.7 introduit le package de contexte essentiel pour résoudre ce problème. . Les contextes fournissent un moyen structuré d'annuler et de surveiller l'exécution des goroutines, offrant une solution fiable pour la terminaison temporelle.
package main import ( "context" "fmt" "time" ) func test(ctx context.Context) { t := time.Now() select { case <-time.After(1 * time.Second): fmt.Println("overslept") case <-ctx.Done(): } fmt.Println("used:", time.Since(t)) } func main() { ctx, _ := context.WithTimeout(context.Background(), 50*time.Millisecond) test(ctx) }
Explication :
Cette approche garantit que les goroutines sont annulées à l'heure spécifiée est passé, quel que soit leur emplacement dans le code.
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!