我正在学习Golang,在Go的博客上阅读this post后,我有以下问题。
我从以下代码开始(来自帖子):
select {
case <-ch:
// a read from ch has occurred
case <-timeout:
// the read from ch has timed out
}
基于A Tour of Go状态:
......如果有多个准备就绪,它会随机选择一个。
据我所知,可以让我的结果准备好并同时超时。我的问题是在默认情况下是否值得(或正确)重复检查。
如下所示:
select {
case <-ch:
// a read from ch has occurred
case <-timeout:
// the read from ch has timed out
// So check ch one last time
select {
case <-ch:
// a read from ch has occurred at same time of a timeout,
// so ignore the timeout
default:
// definitive timeout
}
}
答案 0 :(得分:1)
如果其中一个频道是超时,你的工作完成的几率和完全同时的超时发射是如此之小,他们没有理由考虑。
陈述&#34; ......如果多个准备就绪,它随机选择一个。&#34;当你确实有可行的理由发生这种情况时适用 - 例如,如果你在多个工作渠道上有一个选择案例,你可以用一个goroutine进行处理。