Maison > développement back-end > Golang > le corps du texte

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

DDD
Libérer: 2024-11-01 05:43:02
original
574 Les gens l'ont consulté

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!