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

考虑一下这个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


慕婉清6462132
浏览 61回答 1
1回答

青春有我

根据 的状态做出决定,但它首先计算发送操作的右侧表达式。因此,在进入时,它将等到<股票代码。C 返回。然后它将从通道中读取第一个值,然后写入它...selecttriggerChan
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java