考虑一下这个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
1 回答
青春有我
TA贡献1784条经验 获得超8个赞
根据 的状态做出决定,但它首先计算发送操作的右侧表达式。因此,在进入时,它将等到<股票代码。C 返回。然后它将从通道中读取第一个值,然后写入它...select
triggerChan
添加回答
举报
0/150
提交
取消