我有一个依赖于同时检查一些错误的函数,我正在尝试使用等待组来等待所有返回可能错误的进程都完成,然后再检查所有错误。它似乎正在跳过一些 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
}
}
- 1 回答
- 0 关注
- 231 浏览
添加回答
举报
0/150
提交
取消