我正在尝试创建一个不断从缓冲 channel 和停止 channel 读取的工作人员。
由于如果两个 channel 都准备好,则 select 语句会随机选择停止 channel 。有没有办法对选择进行排序而不是随机排序,以便如果我的缓冲 channel 返回一个值,则执行该代码。
使用无缓冲 channel 可以解决这个问题,但是有什么方法可以使用缓冲 channel 吗?
https://play.golang.org/p/ZuMEkp6sJgv
最佳答案
发布的代码可以简化为:
var channel = make(chan int)
var wg sync.WaitGroup
var limit int = 50000
func main() {
wg.Add(1)
go worker()
for i := 0; i < limit; i++ {
channel <- i
}
close(channel)
wg.Wait()
}
func worker() {
defer wg.Done()
for i := range channel {
log.Println(i)
}
}
关于Golang Stop Worker 但等待缓冲 channel 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61017506/