我有一个昂贵的函数,可以应用于切片的所有项目。我正在使用 goroutines 来处理这个问题,每个 goroutine 处理切片的一项。
func Huge(lst []foo) {
for _, item := range lst {
go performSlow(item)
}
// How do I synchronize here ?
return someValue(lst)
}
问题是,如评论中所示,在调用someValue函数之前等待所有 goroutine 完成其工作的首选方法是什么?将频道传递给performSlow并等待每个人都写完它可以工作,但这似乎有点过分:
func Huge(lst []foo) {
ch := make(chan bool)
for _, item := range lst {
go performSlow(item, ch) // performSlow does its job, then writes a dummy value to ch
}
for i := range lst {
_ = <-ch
}
return someValue(lst)
}
有没有更好(即更有效和/或更惯用)的方法来做到这一点?
相关分类