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 ?
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.
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!