Race-condition with errgroup?


g.Go(func() error {
result, err := makeDBCall()
if err != nil {
fmt.Println("Error 1")
return err
}
return nil
}
g.Go(func() error {
result, err := makeAnotherDBCall()
if err != nil {
fmt.Println("Error 2")
return err
}
return nil
}
g.Go(func() error {
result, err := makeAnotherAnotherDBCall()
if err != nil {
fmt.Println("Error 3")
return err
}
return nil
}
err := g.Wait()
if err != nil {
return
}
fmt.Println("Done with error Group")

我有意让其中一个dbCall()函数返回错误。在发出的10个请求中,可能有3-5个输出为:

启动err组

错误1

Done with error Group

errgroup的文档指出,第一个返回非nil错误的调用将取消该组;Wait.">

返回错误。由于它们是并发运行的,因此无法预测故障发生的顺序。有时它会立即发生,有时只有在其他例程成功运行之后才会发生。平均而言,在错误出现之前,听起来像是3-5个正在运行。一旦这个错误发生,这个组就会被取消,任何还没有启动的例程都不会运行。

最新更新