【问题标题】:How to wait for a group of goroutines? [duplicate]如何等待一组 goroutine? [复制]
【发布时间】:2015-12-29 18:59:14
【问题描述】:

假设我想启动一组 goroutine,然后等待它们全部完成(例如返回)。 我可以想到一些基于通道的解决方案(例如,创建一个通道并收听它计算收到的消息,这些消息应由每个 goroutine 发送并在收到相应数量的 msg 后退出)但也许有一个更优雅/有效的解决方案,因为这种情况似乎很常见。

【问题讨论】:

标签: go concurrency goroutine


【解决方案1】:

是的;你想要一个*sync.WaitGroup,你可以在开始每个任务之前调用waitGroup.Add(1),在它完成时调用waitGroup.Done(),在你开始一切并想要等待它完成后调用waitGroup.Wait()like this

package main

import (
    "fmt"
    "sync"
    "time"
)

func main() {
    wg := new(sync.WaitGroup)
    for i := 1; i < 3; i++ {
        wg.Add(1)
        go func(i int) { // ensures each run gets distinct i
            fmt.Println("Sleeping", i, "seconds")
            time.Sleep(time.Duration(i) * time.Second)
            fmt.Println("Slept", i, "seconds")
            wg.Done()
        }(i)
    }
    wg.Wait()
    fmt.Println("All done")
}

【讨论】:

    猜你喜欢
    • 2019-02-01
    • 2019-01-16
    • 2018-02-24
    • 1970-01-01
    • 2023-04-03
    • 2021-05-14
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多