両方のチャンネルが排水されたときにブロックされ、2 つのチャンネルで定期的にリッスンしたいと考えています。ただし、両方のチャネルにデータが含まれている場合は、一方が処理される前に一方が排出されるようにします。
out
以下の実際の例では、処理する前にすべてを排出したいと考えていexit
ます。select
優先順位のないステートメントを使用しています。出口の前に 10 個のアウト値をすべて処理するようにするには、どうすれば問題を回避できますか?
package main
import "fmt"
func sender(out chan int, exit chan bool){
for i := 1; i <= 10; i++ {
out <- i
}
exit <- true
}
func main(){
out := make(chan int, 10)
exit := make(chan bool)
go sender(out, exit)
L:
for {
select {
case i := <-out:
fmt.Printf("Value: %d\n", i)
case <-exit:
fmt.Println("Exiting")
break L
}
}
fmt.Println("Did we get all 10? Most likely not")
}