为了账号安全,请及时绑定邮箱和手机立即绑定

在一个选择案例中从一个通道读取并写入另一个通道

在一个选择案例中从一个通道读取并写入另一个通道

慕婉清6462132 2022-09-12 16:22:50
考虑一下这个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 返回。然后它将从通道中读取第一个值,然后写入它...selecttriggerChan



查看完整回答
反对 回复 2022-09-12
  • 1 回答
  • 0 关注
  • 60 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信