【发布时间】:2018-04-01 23:12:32
【问题描述】:
我正在关注https://blog.golang.org/pipelines 文章来实现几个阶段。
我需要一个阶段在事件传递到管道的下一个阶段之前引入几秒钟的延迟。
我对下面代码的担忧是,在传递事件之前,time.Sleep() 会产生无限数量的 go 例程。有没有更好的方法来做到这一点?
谢谢!
func fooStage(inChan <- chan *Bar) (<- chan *Bar) {
out := make(chan *Bar, 10000)
go func() {
defer close(out)
wg := sync.WaitGroup{}
for {
select {
case event, ok := <-inChan:
if !ok {
// inChan closed
break
}
wg.Add(1)
go func() {
time.Sleep(5 * time.Second)
out <- event
wg.Done()
}()
}
}
wg.Wait()
}()
return out
}
【问题讨论】:
标签: asynchronous go concurrency channel goroutine