我遇到一种情况,我想跟踪一些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.
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句