选择忽略慢的情况?

问题描述 投票:0回答:1

我在多个案例中使用这样的select

for {
    select {
    case data:= <- highFreqChan:
        // do something:
    case <- time.After(time.Second * 5):
        // send some heartbeat like data...
    }
}

我发现,如果highFreqChan得到大量数据,心跳情况就不会进入,当停止向highFreqChan发送数据时,心跳情况再次存在,如何让它始终进入心跳情况而highFreqChan仍在工作?

go channel
1个回答
8
投票

您正在运行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...
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.