Maison >développement back-end >Golang >Pourquoi mon cas d'expiration du délai d'attente Goroutine ne s'exécute-t-il pas lors de l'utilisation des canaux ?

Pourquoi mon cas d'expiration du délai d'attente Goroutine ne s'exécute-t-il pas lors de l'utilisation des canaux ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-19 10:03:08751parcourir

Why Doesn't My Goroutine Timeout Case Execute When Using Channels?

Cas d'expiration non exécuté dans GoroutineChannels

Dans un extrait de code comportant des goroutines et des canaux, un utilisateur rencontre une situation déroutante où le cas d'expiration dans une instruction select reste inexécutée.

Le code fourni établit deux goroutines, l'un envoie des valeurs à un canal toutes les 1,5 secondes et un autre écoute les valeurs ou déclenche un délai d'attente après 2 secondes. Cependant, le cas de timeout ne se produit jamais.

Pourquoi ce comportement est-il observé ?

La clé réside dans la création répétée du canal de timeout à chaque itération de la boucle de sélection. Chaque fois qu'une valeur est reçue du canal c1, un nouveau canal est généré par time.After(). Ce nouveau canal recevra une valeur après 2 secondes supplémentaires, mais le canal de timeout précédent deviendra obsolète. Par conséquent, le cas d'expiration ne peut jamais être exécuté.

Pour résoudre ce problème et garantir que le délai d'attente se produit comme prévu, créez le canal de délai d'attente une seule fois avant la boucle de sélection. Ce faisant, le canal reste actif tout au long de l'exécution du programme, et le cas de timeout se déclenchera après 2 secondes d'inactivité sur le canal c1.

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