考慮一下這個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
2022-09-12 16:22:50