go / intermediate
Snippet
Tasks synchronisieren mit sync.WaitGroup
Eine WaitGroup wartet auf den Abschluss einer Gruppe von Goroutinen. Die Haupt-Goroutine ruft 'Add' auf, um die Anzahl der Tasks festzulegen, jeder Worker ruft 'Done' auf und 'Wait' blockiert, bis alle fertig sind.
snippet.go
1
2
3
4
5
6
7
8
9
10
11
12
13
func processAll() {var wg sync.WaitGroupfor i := 1; i <= 3; i++ {wg.Add(1)go func(id int) {defer wg.Done()fmt.Printf("Worker %d started\n", id)time.Sleep(time.Second)}(i)}wg.Wait()fmt.Println("All workers finished")}
Erklärung
1
wg.Add(1)
Erhöht den WaitGroup-Zähler für jede neue Goroutine.
2
defer wg.Done()
Verringert den Zähler, wenn die Goroutine ihre Ausführung beendet.
3
wg.Wait()
Blockiert die Ausführung, bis der Zähler den Wert Null erreicht.