gpt4 book ai didi

go - 使用sync.WaitGroup.wait时如何实现超时?

转载 作者:IT老高 更新时间:2023-10-28 13:08:43 27 4
gpt4 key购买 nike

我遇到了一种情况,我想跟踪一些 goroutine 以在特定点同步,例如当所有 url 都被获取时。然后,我们可以将它们全部放置并按特定顺序显示。

我认为这是 barrier 进来的。它在 gosync.WaitGroup 中。但是,在实际情况下,我们不能确保所有的 fetch 操作都会在短时间内成功。所以,我想在 wait 获取操作时引入超时。

我是 Golang 的新手,谁能给我一些建议?


我要找的是这样的:

   wg := &sync.WaigGroup{}
select {
case <-wg.Wait():
// All done!
case <-time.After(500 * time.Millisecond):
// Hit timeout.
}

我知道 Wait 不支持 Channel

最佳答案

如果您想要的只是整洁的选择,您可以通过生成一个调用方法并在完成后关闭/发送 channel 的例程来轻松地将阻塞函数转换为 channel 。

done := make(chan struct{})
go func() {
wg.Wait()
close(done)
}()

select {
case <-done:
// All done!
case <-time.After(500 * time.Millisecond):
// Hit timeout.
}

关于go - 使用sync.WaitGroup.wait时如何实现超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34395060/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com