Maison  >  Article  >  développement back-end  >  Comment prévenir les fuites Goroutine et annuler les requêtes HTTP dans un délai d'attente ?

Comment prévenir les fuites Goroutine et annuler les requêtes HTTP dans un délai d'attente ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 09:43:02639parcourir

How to Prevent Goroutine Leaks and Cancel HTTP Requests within a Timeout?

Délai d'expiration de Goroutine avec contrôle de concurrence

Dans le code fourni, vous avez implémenté une fonction, Find(), qui utilise une goroutine (instruction go func()) pour récupération de données asynchrone à l'aide de findCicCode(). Vous avez défini un délai d'attente de 50 millisecondes pour recevoir la réponse de la goroutine.

Cependant, vous vous inquiétez des fuites potentielles de la goroutine si le délai d'attente est dépassé. De plus, vous aimeriez pouvoir annuler les requêtes HTTP effectuées par findCicCode() lorsque le délai d'attente se produit.

Prévention des fuites Goroutine

Pour gérer les fuites goroutine, il est essentiel pour garantir que toute goroutine créée dans une portée spécifique est terminée avant la fin de la portée. Dans ce cas, il est important d'annuler la goroutine dans l'instruction select lorsque le délai d'attente est atteint :

<code class="go">case <-time.After(50 * time.Millisecond):
  // Cancel the goroutine to prevent a potential leak
  close(ch)
  return "Request timed out", false</code>

Annulation de la demande HTTP

Pour annuler les requêtes HTTP dans la goroutine, vous pouvez exploiter le contexte.Context et context.CancelFunc fournis par la bibliothèque standard Go :

<code class="go">// Create a context with a timeout of 50 milliseconds
ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)
defer cancel()

// Execute the findCicCode() function within this context
data, status := findCicCodeWithContext(ctx)

// If the context is canceled (timeout), the HTTP requests will be aborted</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!

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