【发布时间】:2018-04-05 00:31:48
【问题描述】:
我正在寻找一种在 go 中异步执行两个函数的方法,它们返回不同的结果和错误,等待它们完成并打印两个结果。此外,如果其中一个函数返回错误,我不想等待另一个函数,而只是打印错误。 例如,我有这个功能:
func methodInt(error bool) (int, error) {
<-time.NewTimer(time.Millisecond * 100).C
if error {
return 0, errors.New("Some error")
} else {
return 1, nil
}
}
func methodString(error bool) (string, error) {
<-time.NewTimer(time.Millisecond * 120).C
if error {
return "", errors.New("Some error")
} else {
return "Some result", nil
}
}
这里https://play.golang.org/p/-8StYapmlg 是我实现它的方式,但我认为它的代码太多了。它可以通过使用 interface{} 来简化,但我不想这样。我想要一些更简单的东西,例如,可以在 C# 中使用 async/await 实现。可能有一些库可以简化这种操作。
更新:感谢您的回复!我得到帮助的速度真是太棒了!我喜欢 WaitGroup 的用法。它显然使代码对更改更加健壮,因此我可以轻松地添加另一个异步方法,而最终无需更改方法的确切计数。但是,与 C# 中的相同代码相比,仍然有很多代码。我知道在 go 中我不需要将方法显式标记为异步,使它们实际上返回任务,但是方法调用看起来要简单得多,例如,考虑这个链接actually catching exception is also needed 顺便说一句,我发现在我的任务中我实际上不需要知道我想要运行异步的函数的返回类型,因为它无论如何都会被编组为 json,现在我只是在 go 的端点层调用多个服务-工具包。
【问题讨论】: