如果没有在 select 语句中的正确时刻捕获通过 golang 中的 channel 传入的数据,是否有可能被忽略?
例如,假设有这个选择语句:
for {
select {
case <-timer.C:
//block A
default:
// block B takes 2 seconds.
}
}
如果计时器在 block B 运行时结束, block A 是否仍在循环的下一次迭代中运行,或者 channel 的传入数据是否丢失?
最佳答案
当定时器超时时,它会发送C上的当前时间。如果此时没有人正在从C读取,发送会阻塞,所以它会一直等到值被接收。在这种情况下,它将等到循环的下一次迭代。
channel 被设计成一种同步机制,因此它们不需要读者和作者已经同步。
关于go - 来自不同 channel 的数据进入 select 语句可以被忽略吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30108562/