连续向多个通道发送数据
Send data to multiple channels in succession
我有以下情况:每分钟调用一次的函数,每次调用它时都会尝试将数据发送到多个定义的通道。
var chan1 = make(chan bool)
var chan2 = make(chan bool)
var chan3 = make(chan bool)
go func() {
for {
<-time.After(1* time.Minute)
chan1 <- true
chan2 <- false
chan3 <- true
}
}()
然后在三个单独的 go 例程中,每个通道都通过 select
读取,就像这样。
go func() {
var myVar bool
select {
case <- chan1: //or chan2, chan3 etc...
myVar = true
default:
myVar = false
}()
问题只是 chan1
从第一个基于时间的循环接收数据。因此,似乎正在发生的是,在读取第一个通道之前,所有后续通道的数据发送都被阻止。我该如何纠正?
使用 buffered channel:
var chan1 = make(chan bool, 1)
var chan2 = make(chan bool, 1)
var chan3 = make(chan bool, 1)
或运行发送asynchronously:
go func() {
chan1 <- true
}()
我有以下情况:每分钟调用一次的函数,每次调用它时都会尝试将数据发送到多个定义的通道。
var chan1 = make(chan bool)
var chan2 = make(chan bool)
var chan3 = make(chan bool)
go func() {
for {
<-time.After(1* time.Minute)
chan1 <- true
chan2 <- false
chan3 <- true
}
}()
然后在三个单独的 go 例程中,每个通道都通过 select
读取,就像这样。
go func() {
var myVar bool
select {
case <- chan1: //or chan2, chan3 etc...
myVar = true
default:
myVar = false
}()
问题只是 chan1
从第一个基于时间的循环接收数据。因此,似乎正在发生的是,在读取第一个通道之前,所有后续通道的数据发送都被阻止。我该如何纠正?
使用 buffered channel:
var chan1 = make(chan bool, 1)
var chan2 = make(chan bool, 1)
var chan3 = make(chan bool, 1)
或运行发送asynchronously:
go func() {
chan1 <- true
}()