我在多个案例中使用这样的select
:
for {
select {
case data:= <- highFreqChan:
// do something:
case <- time.After(time.Second * 5):
// send some heartbeat like data...
}
}
我发现,如果highFreqChan
得到大量数据,心跳情况就不会进入,当停止向highFreqChan
发送数据时,心跳情况再次存在,如何让它始终进入心跳情况而highFreqChan
仍在工作?
您正在运行time.After
作为选择条件的一部分,这意味着它在达到选择时进行评估...这意味着它将在达到选择后5秒到期。所以如果highFreqChan
连续5秒没有任何数据,你只会进入那种情况。
如果你想每5秒钟做一次,请使用time.Ticker,如下所示:
heartbeat := time.NewTicker(5 * time.Second)
defer heartbeat.Stop()
for {
select {
case data:= <- highFreqChan:
// do something:
case <- heartbeat.C:
// send some heartbeat like data...
}
}