来自不同渠道进入 select 语句的数据会被忽略吗?

如果数据没有在 select 语句中的正确时刻被捕获,那么通过 golang 中的通道进入的数据是否有可能被忽略?


例如,假设有这个 select 语句:


for {

    select {

    case <-timer.C:

        //block A

    default:

        // block B takes 2 seconds.

    }

}

如果计时器在块 B 运行时结束,块 A 是否仍在循环的下一次迭代中运行,或者通道的传入数据是否丢失?


翻过高山走不出你
浏览 157回答 1
1回答

慕雪6442864

当定时器超时时,它会在 C 上发送当前时间。如果当时没有人从 C 读取,则发送将阻塞,因此它将等待直到收到值。在这种情况下,它将等到循环的下一次迭代。通道被设计为一种同步机制,因此它们不需要读者和作者已经同步。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go