Метод sync.WaitGroup.Wait
Метод Wait принадлежит структуре sync.WaitGroup.
Он используется для ожидания завершения всех горутин,
которые были запущены и учтены с помощью методов
Add и Done. Когда счетчик внутреннего
счетчика WaitGroup становится равным нулю,
блокировка снимается, и выполнение программы продолжается.
Синтаксис
wg.Wait()
Метод не принимает параметров и не возвращает значений. Он используется в главной горутине для ожидания завершения всех рабочих горутин.
Пример
Давайте рассмотрим базовый пример использования метода Wait:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 1; i <= 3; i++ {
wg.Add(1)
go func(n int) {
defer wg.Done()
fmt.Printf("Goroutine %d done\n", n)
}(i)
}
wg.Wait()
fmt.Println("All goroutines completed")
}
Результат выполнения кода:
"Goroutine 3 done"
"Goroutine 1 done"
"Goroutine 2 done"
"All goroutines completed"
Обратите внимание, что порядок вывода горутин может быть
различным, но строка All goroutines completed
всегда выводится последней благодаря методу Wait.
Пример
Метод Wait часто используется для ожидания завершения
нескольких горутин, выполняющих разные задачи. Например,
мы можем запустить несколько горутин для обработки данных
и дождаться их завершения:
package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
numbers := []int{1, 2, 3, 4, 5}
for _, num := range numbers {
wg.Add(1)
go func(n int) {
defer wg.Done()
time.Sleep(100 * time.Millisecond)
fmt.Printf("Processed: %d\n", n*2)
}(num)
}
wg.Wait()
fmt.Println("All processing completed")
}
Результат выполнения кода:
"Processed: 2"
"Processed: 4"
"Processed: 6"
"Processed: 8"
"Processed: 10"
"All processing completed"
В этом примере метод Wait блокирует главную горутину
до тех пор, пока все горутины не завершат обработку
своих чисел, после чего выводится итоговое сообщение.
Смотрите также
-
структуру
sync.WaitGroup,
которая представляет собой группу ожидания -
метод
sync.WaitGroup.Add,
который увеличивает счетчик WaitGroup -
метод
sync.WaitGroup.Done,
который уменьшает счетчик WaitGroup -
ключевое слово
goroutine,
которое используется для запуска параллельных функций