我在尝试时遇到了这个问题time.Ticker
.
如下面的代码,case <-time.After(time.Millisecond * 5500):
从不执行,程序会重复打印“ticker”和“chan”。
谁能解释一下吗?
package main
import (
"fmt"
"os"
"time"
)
func main() {
ticker := time.NewTicker(time.Second * 2)
defer ticker.Stop()
ch := time.Tick(time.Second * 3)
for {
select {
case t := <-ticker.C:
fmt.Println("From ticker:", t)
case t := <-ch:
fmt.Println("From chan:", t)
case <-time.After(time.Millisecond * 5500):
fmt.Println("timeout, exit")
os.Exit(1)
}
}
}
output:
From ticker: 2021-02-02 11:31:55.9902354 +0800 CST m=+2.002391201
From chan: 2021-02-02 11:31:56.990678 +0800 CST m=+3.002835701
From ticker: 2021-02-02 11:31:57.9900811 +0800 CST m=+4.002240701
From chan: 2021-02-02 11:31:59.9901219 +0800 CST m=+6.002285301
From ticker: 2021-02-02 11:31:59.9901219 +0800 CST m=+6.002285301
From ticker: 2021-02-02 11:32:01.9901347 +0800 CST m=+8.002301901
From chan: 2021-02-02 11:32:02.990973 +0800 CST m=+9.003142101
From ticker: 2021-02-02 11:32:03.9899932 +0800 CST m=+10.002164201
From ticker: 2021-02-02 11:32:05.9911548 +0800 CST m=+12.003329601
From chan: 2021-02-02 11:32:05.9911548 +0800 CST m=+12.003329601
From ticker: 2021-02-02 11:32:07.9898197 +0800 CST m=+14.001998301
一切都按预期进行。你的前两种情况总是产生一个小于 5500ms 的值,所以不,time.After
永远不会产生价值。
每次select
遇到的是,一个new频道由返回time.After
它将在 5.5 秒内发出一个值。您实际上永远不会等待 5.5 秒,因为两个股票行情指示器始终首先发出值,因此time.After
的分支select
永远不会执行并且该通道被丢弃。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)