Maison >développement back-end >Golang >Comment empêcher les requêtes HTTP de continuer après un délai d'attente dans un Goroutine ?

Comment empêcher les requêtes HTTP de continuer après un délai d'attente dans un Goroutine ?

DDD
DDDoriginal
2024-11-01 05:43:02642parcourir

How to Prevent HTTP Requests from Continuing After Timeout in a Goroutine?

Goroutine Timeout

La fonction fournie, Find(), utilise une goroutine pour effectuer une série de requêtes HTTP et gérer leurs réponses. Cependant, le souci est que ces requêtes continuent en arrière-plan même si elles dépassent le délai d'attente spécifié.

Fuite potentielle de Goroutine

Il est peu probable qu'il y ait une fuite de goroutine dans le code. Lorsque la fonction Find() renvoie un délai d'attente, la goroutine principale continue et la goroutine d'arrière-plan est essentiellement abandonnée.

Annulation de la demande HTTP

Pour éviter de faire des requêtes après un délai d'attente , la solution consiste à utiliser un context.Context pour chaque requête HTTP. Un contexte permet d'annuler la requête si un timeout survient.

<code class="go">func Find() (interface{}, bool) {
  ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)
  defer cancel()

  ch := make(chan Response, 1)

  go func() {
    data, status := findCicCode()
    ch <- Response{data: data, status: status}
  }()

  select {
  case response := <-ch:
    return response.data, response.status
  case <-ctx.Done():
    return "Request timed out", false
  }
}</code>

Lorsque le timeout survient, l'appel de Cancel() annulera toutes les requêtes HTTP créées au sein du ctx. Cela empêche tout traitement ultérieur ou toute ressource consommée par ces demandes.

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