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