Le package context
de Go fournit un mécanisme puissant pour gérer l'annulation et les délais d'attente dans les programmes simultanés. Il est crucial pour l'écriture de code robuste et efficace, en particulier lorsqu'il s'agit d'opérations de longue date. L'interface context.Context
représente un délai, un signal d'annulation et d'autres valeurs de demande de demande. Vous pouvez créer des contextes avec des délais à l'aide context.WithCancel
context.WithTimeout
Ces fonctions renvoient un nouveau context.Context
et un context.CancelFunc
. Le CancelFunc
vous permet d'annuler manuellement le contexte, déclenchant des signaux d'annulation en aval. Lorsqu'un contexte est annulé, toutes les opérations utilisant ce contexte doivent se terminer gracieusement.
Illustrons avec un exemple:
<🎝🎝🎝> Dans cet exemple, longRunningTask
s'exécute en continu jusqu'à ce que le contexte soit annulé. Le context.WithTimeout
crée un contexte qui sera annulé après 5 secondes. Le defer cancel()
garantit que le contexte est annulé même s'il y a des erreurs. Le canal <-ctx.Done()
attend l'annulation du contexte, permettant à la fonction principale de quitter gracieusement.
Annulation efficace du contexte dans les programmes GO simultanés repose sur la propagation et la gestion appropriées du context.Context
. Voici quelques meilleures pratiques:
ctx.Done()
dans vos Goroutines. Ce canal se ferme lorsque le contexte est annulé. Utilisez une instruction select
pour gérer à la fois l'annulation et d'autres événements simultanément.ctx.Done()
), effectuez des opérations de nettoyage comme la fermeture des fichiers, la libération de ressources et la cohérence des données. Évitez les paniques; Au lieu de cela, gérez gracieusement les erreurs.ctx.Done()
périodiquement pour empêcher le goroutine de suspendre.La propagation du contexte garantit que toutes les parties de votre programme simultané sont conscientes du délai ou de l'annulation globale. Cela se fait en passant le contexte à chaque goroutine qui doit en être conscient. Le contexte devrait être le premier argument à toute fonction qui effectue des opérations potentiellement longues.
Exemple illustrant la propagation du contexte:
<🎝🎝🎝> Cet exemple montre comment le contexte est transmis à chaque worker
goroutine. Chaque travailleur vérifie ctx.Done()
et sort gracieusement lorsque le contexte est annulé.
Plusieurs pièges communs peuvent survenir lors de l'utilisation context.WithTimeout
AVEC TEMPS ET context.WithCancel
.
En suivant ces meilleures pratiques et en évitant ces pièges, vous pouvez efficacement utiliser le package context
de Go pour créer des programmes simultanés robustes, efficaces et annulés.
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!