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

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

王林
Libérer: 2024-02-12 13:45:06
avant
860 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!

source:stackoverflow.com
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!