为了账号安全,请及时绑定邮箱和手机立即绑定

Golang WaitGroup.Done() 被跳过

Golang WaitGroup.Done() 被跳过

Go
三国纷争 2022-01-17 20:02:38
我有一个依赖于同时检查一些错误的函数,我正在尝试使用等待组来等待所有返回可能错误的进程都完成,然后再检查所有错误。它似乎正在跳过一些 wg.Done() cals。这是调试的 youtube 视频(它循环了 3 次“for”循环,抱歉): Golang Delve Debug for WaitGroups知道为什么它会跳过一些 waitgroup.Done() 调用吗?
查看完整描述

1 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

为了后代(和谷歌搜索):


放在wg.Add(1)每一go func()行之前,而不是一次性完成wg.Add(gorutineCt)


放在defer wg.Done()每个 goroutine 外壳的开头,而不是wg.Done()在每个退出案例中调用。这确保wg.Done()无论如何都可以运行。


使用更接近的例程,而不是尝试充分缓冲通道:


// start other goroutines


go func () {

    wg.Wait()

    close(errschan)

}


for _, err := range errsChan { // automatically terminates once chan is closed

    if err != nil {

         // handle err

    }

}


查看完整回答
反对 回复 2022-01-17
  • 1 回答
  • 0 关注
  • 231 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信