package main
import (
"fmt"
"sync"
"time"
)
func main() {
longTimeAct := func(index int, w chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
time.Sleep(1 * time.Second)
fmt.Println(time.Now())
fmt.Println(index)
<-w
}
wg := new(sync.WaitGroup)
ws := make(chan struct{}, 3)
for i := 0; i < 100; i++ {
ws <- struct{}{}
wg.Add(1)
go longTimeAct(i, ws, wg)
}
wg.Wait()
}
非常精巧的代碼,其中管道是用來保證併發次數的,而waitgroup看似是多餘的,其實作用很重要的,保證每個任務能夠正常的結束。