How to maintain the order of GoRoutines using sync.WaitGroup And Channel
Jun 10, 2024
here’s the code
package main
import (
"math/rand"
"sync"
"time"
"fmt"
)
func main() {
var wg sync.WaitGroup
total := 1000
var channels []chan int
for i := 1; i <= total; i++ {
wg.Add(1)
ch := make(chan int)
channels = append(channels, ch)
go func(idx int, chn chan<- int, wg *sync.WaitGroup) {
defer wg.Done()
var randomizer = rand.New(rand.NewSource(time.Now().UTC().UnixNano()))
time.Sleep(time.Duration(randomizer.Intn(500)) * time.Microsecond)
chn <- idx
}(i, ch, &wg)
}
for _, ch := range channels {
fmt.Println(<-ch)
close(ch)
}
wg.Wait()
}
The results is :
1
2
3
4
5
...
...
989
990
991
992
993
994
995
996
997
998
999
1000