Maison  >  Article  >  développement back-end  >  Comment éviter les fuites de goroutines et annuler les requêtes HTTP en cas d'expiration du délai ?

Comment éviter les fuites de goroutines et annuler les requêtes HTTP en cas d'expiration du délai ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-31 08:22:02540parcourir

How to prevent goroutine leaks and cancel HTTP requests when a timeout occurs?

Délai d'expiration et annulation de Goroutine

Le code fourni définit une fonction Find() qui tente d'obtenir des données d'un service externe via des appels HTTP et expire après une durée spécifiée . Cependant, la préoccupation soulevée est de savoir s'il existe un risque de fuite de goroutine et s'il existe un moyen d'annuler les requêtes HTTP lorsque le délai d'attente survient.

Annulation basée sur le contexte

Pour contrôler efficacement l'annulation des requêtes HTTP, le mécanisme context.Context peut être utilisé. En utilisant un contexte avec un délai d'expiration, vous pouvez garantir que toutes les requêtes HTTP associées à ce contexte seront terminées lorsque le délai d'expiration est atteint.

Le code suivant illustre comment implémenter une annulation basée sur le contexte :

<code class="go">// create a timeout or cancelation context to suit your requirements
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()

req, err := http.NewRequest("GET", location, nil)

// add the context to each request and they will be canceled in unison
resp, err := http.Do(req.WithContext(ctx))</code>

Dans ce code, ctx spécifie le délai d'attente ou les critères d'annulation, et defer Cancel() garantit que le contexte est toujours annulé au retour de la fonction. En ajoutant le contexte à chaque requête via req.WithContext(ctx), toutes les requêtes seront annulées simultanément à l'expiration du délai d'attente.

Cette approche garantit que les goroutines responsables de l'exécution des requêtes HTTP seront terminées à l'expiration du délai d'attente. se produit, empêchant les fuites de goroutine et garantissant que le système répond rapidement aux délais d'attente.

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:
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