Ticker Stop comportement à Golang
Si je suis en allant sur un ticker canal et appelle stop() la chaîne est arrêtée, mais pas fermé.
Dans cet Exemple:
package main
import (
"time"
"log"
)
func main() {
ticker := time.NewTicker(1 * time.Second)
go func(){
for _ = range ticker.C {
log.Println("tick")
}
log.Println("stopped")
}()
time.Sleep(3 * time.Second)
log.Println("stopping ticker")
ticker.Stop()
time.Sleep(3 * time.Second)
}
Cours d'exécution produit:
2013/07/22 14:26:53 tick
2013/07/22 14:26:54 tick
2013/07/22 14:26:55 tick
2013/07/22 14:26:55 stopping ticker
De sorte que goroutine jamais quitte. Est-il une meilleure façon de gérer ce cas? Dois-je prendre soin que la goroutine jamais quitté?
source d'informationauteur whatupdave
Vous devez vous connecter pour publier un commentaire.
Signal "fait" sur un deuxième canal et sélectionnez dans votre goroutine entre symbole et fait du canal.
En fonction de ce que vous voulez vraiment faire une meilleure solution pourrait exister, mais c'est difficile de dire à partir de la réduction de la démo de code.
Utilisé un deuxième canal Volker suggéré. C'est ce que j'ai terminé la course à pied avec:
vous pouvez faire comme ceci.
Si Vous devez enregistrer plus d'espace, utilisez les canaux de vide structs - struct{} qui ne coûte pas de mémoire. Et comme mentionné ci-dessus ne.t envoyer quelque chose en elle - il suffit de fermer, ce qui en fait envoyer la valeur zéro.