Maison > développement back-end > Golang > Est-ce que cela a du sens avec defer Cancel() ?

Est-ce que cela a du sens avec defer Cancel() ?

王林
Libérer: 2024-02-12 13:45:06
avant
969 Les gens l'ont consulté

这对于 defer cancel() 有意义吗?

Le contenu de la question

a-t-il un sens en http.HandlerFunc 中我得到了这个。但我的问题是:在应用超时上下文之后放置 defer cancel() ?

Parce que la sélection du bas continuera à écouter jusqu'à ce que le contexte soit terminé. Et le délai sera exécuté une fois le contexte terminé. Mais est-ce que c'est fait ? :)

//  Apply timeout context
var cancel context.CancelFunc
ctx, cancel = context.WithTimeout(ctx, time.Duration(time.Duration(match_route.timeout) * time.Second))
defer cancel() // <--- does this make sense

go func(){
    match_route.handler(w, r.WithContext(ctx))
    cancel()
}()

select {
case <-ctx.Done():
    if ctx.Err() == context.DeadlineExceeded {
        http.Error(w, "Timeout", http.StatusRequestTimeout)
    }
}
Copier après la connexion

Solution de contournement

Oui, je pense que cela a du sens, utilisez en fait l'instruction defer cancel() 的目的是确保调用 cancel 函数来释放与上下文关联的资源,无论函数如何退出,在您的示例中, cancel() 函数被推迟到 http.HandlerFunc 完成后或上下文完成时执行,因此 go func() 负责使用提供的上下文执行 match_route.handler 函数,然后调用 cancel()显式取消上下文,select pour attendre que le contexte se termine et si le contexte se termine en raison du dépassement du délai, une réponse d'erreur sera renvoyée !

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 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