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

Comment créer un contexte dans Go qui ne s'annule pas ?

Barbara Streisand
Libérer: 2024-11-09 06:00:03
original
747 Les gens l'ont consulté

How to Create a Context in Go that Doesn't Cancel?

Contourner la propagation de l'annulation du contexte

La gestion du contexte dans Go fournit un moyen de transmettre des données entre différentes parties de l'application et de gérer l'annulation. Cependant, le défi se pose lorsque vous avez besoin d'un contexte qui hérite des données d'origine mais reste non affecté par son annulation.

Pour répondre à ce besoin, Go 1.21 introduit la méthode WithoutCancel dans le package de contexte, qui remplit cette exigence.

Alternativement, si vous utilisez une version antérieure de Go, vous pouvez créer votre propre implémentation de contexte spécialement conçue pour empêcher l'annulation. Voici comment :

import (
    "context"
    "time"
)

type noCancel struct {
    ctx context.Context
}

func (c noCancel) Deadline() (time.Time, bool)       { return time.Time{}, false }
func (c noCancel) Done() <-chan struct{}             { return nil }
func (c noCancel) Err() error                        { return nil }
func (c noCancel) Value(key interface{}) interface{} { return c.ctx.Value(key) }

// WithoutCancel returns a context that is never canceled.
func WithoutCancel(ctx context.Context) context.Context {
    return noCancel{ctx: ctx}
}
Copier après la connexion

Avec cette implémentation de contexte personnalisé, vous pouvez obtenir une copie du contexte d'origine qui :

  • Hérite de toutes les valeurs stockées dans le contexte d'origine.
  • Reste actif même après l'annulation du contexte d'origine.

Cette approche vous permet d'exécuter des tâches asynchrones dans des goroutines distinctes, garantissant leur exécution même lorsque le contexte parent est terminé.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal