在 Go 中使用 sync.WaitGroup
來處理并發(fā)任務,可以確保在所有任務完成之前等待主程序的執(zhí)行。下面是一個簡單的例子:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
numTasks := 10
// 增加任務數(shù)
wg.Add(numTasks)
for i := 0; i < numTasks; i++ {
go func(taskNum int) {
defer wg.Done() // 每個任務執(zhí)行完成后減少任務數(shù)
fmt.Printf("Task %d is running\n", taskNum)
// 執(zhí)行具體任務
}(i)
}
// 等待所有任務完成
wg.Wait()
fmt.Println("All tasks are completed")
}
在上面的例子中,我們首先創(chuàng)建了一個 WaitGroup
對象 wg
,然后使用 Add()
方法增加了需要等待的任務的數(shù)量。在每個任務的 goroutine 中,我們使用 defer wg.Done()
來在任務執(zhí)行完畢后減少任務數(shù)。最后,我們使用 Wait()
方法來等待所有任務完成,然后輸出相應的信息。
對于每個任務,你可以在 go func()
中執(zhí)行具體的任務邏輯,例如進行數(shù)據(jù)處理、調用 API,或者執(zhí)行其他操作。每個任務完成時,調用 wg.Done()
來減少任務數(shù)。
使用 sync.WaitGroup
的好處是可以確保在所有任務完成之前主程序不會退出。