我遇到过一种情况,我想跟踪一些goroutine以在特定点上同步,例如当获取所有URL时.然后,我们可以将它们全部放入并按特定顺序显示它们.
我认为这是障碍.它go
与之相伴sync.WaitGroup
.但是,在实际情况下,我们无法确保所有获取操作都能在短时间内成功.所以,我想wait
在获取操作时引入超时.
我是新手Golang
,所以有人可以给我一些建议吗?
我要找的是这样的:
wg := &sync.WaigGroup{} select { case <-wg.Wait(): // All done! case <-time.After(500 * time.Millisecond): // Hit timeout. }
我知道Wait
不支持Channel
.
如果您想要的只是您的整洁选择,您可以通过生成调用方法的例程并在完成后关闭/发送通道,轻松地将阻塞功能转换为通道.
done := make(chan struct{}) go func() { wg.Wait() close(done) }() select { case <-done: // All done! case <-time.After(500 * time.Millisecond): // Hit timeout. }