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

安迪

我遇到一种情况,我想跟踪一些goroutine在特定点上进行同步,例如,在提取所有URL时。然后,我们可以将它们全部放置并按特定顺序显示它们。

我觉得这是障碍的用武之地。它是gosync.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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

sync.WaitGroup是Barrier的实现吗?

来自分类Dev

收到“致命错误:所有goroutine都在睡着-死锁!” 使用sync.WaitGroup时

来自分类Dev

使用goroutine进入WaitGroup

来自分类Dev

将sync.WaitGroup与外部功能配合使用的最佳方法

来自分类Dev

如何使用WaitGroup处理工作池中的错误?

来自分类Dev

golang sync.WaitGroup永远不会完成

来自分类Dev

使用sync.WaitGroup和频道的Golang应用程序永不退出

来自分类Dev

通过通道进行sync.WaitGroup的优势是什么?

来自分类Dev

Sync.WaitGroup,为什么在goroutine中更近

来自分类Dev

使用 identityserver4 和 aspnet 身份时如何安全地实现空闲超时?

来自分类Dev

为什么这个WaitGroup有时不等待所有goroutine?

来自分类Dev

如何正确使用sync.Cond?

来自分类Dev

如何使用Dart future.sync方法

来自分类Dev

等待同步.Waitgroup推迟

来自分类Dev

使用/ dev / urandom擦拭设备时使用'sync'

来自分类Dev

使用 DispatchQueue.main.sync 时应用程序崩溃

来自分类Dev

如何使用Browser-sync进行远程调试?

来自分类Dev

如何以及何时在Julia中使用@async和@sync

来自分类Dev

如何确保使用Microsoft Sync Framework的同步成功?

来自分类Dev

如何使用Firefox Sync帐户管理计算机?

来自分类Dev

如何使用Microsoft Sync Framework与过滤器数据同步

来自分类Dev

如何使用Couchbase服务器配置sync_gateway

来自分类Dev

如何在Swift中使用dispatch_sync?

来自分类Dev

使用NHibernate时是否可以为事务设置Firebird WAIT超时

来自分类Dev

尝试使用WebClient.DownloadFile()或WebRequest下载文件时无法实现超时

来自分类Dev

尝试使用WebClient.DownloadFile()或WebRequest下载文件时无法实现超时

来自分类Dev

使用 Telethon.sync 时如何处理“洪水等待”错误?

来自分类Dev

单纯使用Solr时如何解决“锁定获取超时”?

来自分类Dev

使用“ sync”调度到队列和使用带有“ .wait”标志的工作项之间的区别?

Related 相关文章

  1. 1

    sync.WaitGroup是Barrier的实现吗?

  2. 2

    收到“致命错误:所有goroutine都在睡着-死锁!” 使用sync.WaitGroup时

  3. 3

    使用goroutine进入WaitGroup

  4. 4

    将sync.WaitGroup与外部功能配合使用的最佳方法

  5. 5

    如何使用WaitGroup处理工作池中的错误?

  6. 6

    golang sync.WaitGroup永远不会完成

  7. 7

    使用sync.WaitGroup和频道的Golang应用程序永不退出

  8. 8

    通过通道进行sync.WaitGroup的优势是什么?

  9. 9

    Sync.WaitGroup,为什么在goroutine中更近

  10. 10

    使用 identityserver4 和 aspnet 身份时如何安全地实现空闲超时?

  11. 11

    为什么这个WaitGroup有时不等待所有goroutine?

  12. 12

    如何正确使用sync.Cond?

  13. 13

    如何使用Dart future.sync方法

  14. 14

    等待同步.Waitgroup推迟

  15. 15

    使用/ dev / urandom擦拭设备时使用'sync'

  16. 16

    使用 DispatchQueue.main.sync 时应用程序崩溃

  17. 17

    如何使用Browser-sync进行远程调试?

  18. 18

    如何以及何时在Julia中使用@async和@sync

  19. 19

    如何确保使用Microsoft Sync Framework的同步成功?

  20. 20

    如何使用Firefox Sync帐户管理计算机?

  21. 21

    如何使用Microsoft Sync Framework与过滤器数据同步

  22. 22

    如何使用Couchbase服务器配置sync_gateway

  23. 23

    如何在Swift中使用dispatch_sync?

  24. 24

    使用NHibernate时是否可以为事务设置Firebird WAIT超时

  25. 25

    尝试使用WebClient.DownloadFile()或WebRequest下载文件时无法实现超时

  26. 26

    尝试使用WebClient.DownloadFile()或WebRequest下载文件时无法实现超时

  27. 27

    使用 Telethon.sync 时如何处理“洪水等待”错误?

  28. 28

    单纯使用Solr时如何解决“锁定获取超时”?

  29. 29

    使用“ sync”调度到队列和使用带有“ .wait”标志的工作项之间的区别?

热门标签

归档