实现思路
- 定义一个任务列表,每个任务是一个函数。
- 创建一个
sync.WaitGroup
实例。
- 遍历任务列表,为每个任务开启一个
goroutine
,在开启 goroutine
前调用 wg.Add(1)
增加等待组计数器。
- 在每个
goroutine
任务完成时,调用 wg.Done()
减少等待组计数器。
- 主
goroutine
调用 wg.Wait()
等待所有任务完成后再继续后续操作。
代码示例
package main
import (
"fmt"
"sync"
)
// 定义任务函数
func task(i int, wg *sync.WaitGroup) {
defer wg.Done()
fmt.Printf("Task %d is running\n", i)
// 模拟任务执行
// time.Sleep(time.Second)
fmt.Printf("Task %d is done\n", i)
}
func main() {
var wg sync.WaitGroup
tasks := []int{1, 2, 3, 4, 5}
for _, taskNum := range tasks {
wg.Add(1)
go task(taskNum, &wg)
}
wg.Wait()
fmt.Println("All tasks are completed, continue with subsequent operations.")
}