考虑一下这个Go代码,它应该立即调用,然后每分钟调用一次:worker.DoWork()
triggerChan := make(chan time.Time, 1)
triggerChan <- time.Now() // We don't want to wait a minute for the first call of worker.DoWork() to happen.
ticker := time.NewTicker(time.Minute)
defer ticker.Stop()
for {
select {
case triggerChan <- <-ticker.C:
case <-triggerChan:
worker.DoWork()
}
}
在第一个值之前写入一个值,以指示它立即调用。但是,在已经有可用值的情况下(如果我们使用类似的东西而不是),则不太可能),会发生什么?运行时会看到这会阻塞,还是会愉快地软锁,不知道要用的结果做什么?它是否意识到这种“从渠道到渠道”的情况?triggerChanselectcase <-triggerChanworker.DoWork()ticker.Ctime.Microsecondtime.MinutetriggerChan <- <-ticker.C<-ticker.C
青春有我
相关分类