go 版本 go1.11.4 darwin/amd64
创建了一个新的channel和goroutine,通过goroutine将旧channel的内容传输到new channel。应该不会阻塞,但是经过测试,发现是阻塞了。
谢谢。
type waiter struct {
ch1 chan struct{}
ch2 <-chan time.Time
limit int
count int
}
func (w *waiter) recv1Block() chan struct{} {
ch := make(chan struct{})
go func() {
for m := range w.ch1 {
ch <- m
}
}()
return ch
}
func (w *waiter) runBlock(wg *sync.WaitGroup) {
defer wg.Done()
i := 0
for i < w.limit {
select {
case <-w.recv1Block(): **// why block here?**
i++
case <-w.recv2():
}
}
w.count = i
}
为什么recv1Block会被block。
蛊毒传说
相关分类