Warten Sie auf die Beendigung von n Goroutinen
Ich muss eine Menge Goroutinen starten und auf ihre Beendigung warten. Die intuitive Methode scheint einen Kanal zu verwenden, um zu warten, bis alle beendet sind:
package main
type Object struct {
//data
}
func (obj *Object) Update(channel chan int) {
//update data
channel <- 1
return
}
func main() {
channel := make(chan int, n)
list := make([]Object, n, m)
for {
for _, object := range list {
go object.Update(channel)
}
for i := 0; i < n; i++ {
<-channel
}
//now everything has been updated. start again
}
}
Das Problem ist jedoch, dass sich die Anzahl der Objekte und damit die Anzahl der Goroutinen ändern kann. Ist es möglich, die Puffergröße eines Kanals zu ändern?
Gibt es vielleicht einen eleganteren Weg, dies zu tun?