当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《使用sync.WaitGroup.wait时如何实现超时?》经验,为你挑选了1个好方法。

我遇到过一种情况,我想跟踪一些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.



1> tomasz..:

如果您想要的只是您的整洁选择,您可以通过生成调用方法的例程并在完成后关闭/发送通道,轻松地将阻塞功能转换为通道.

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

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

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有