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!