可以使用 WaitGroup 来实现多个协程执行并等待所有协程完成后再执行。WaitGroup 是一个计数器,用来记录还有多少个协程没有完成。当每个协程完成时,将计数器减一,当计数器为 0 时,说明所有协程都已经完成,可以继续执行后续操作。

下面是一个使用 WaitGroup 的示例代码:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup

    for i := 1; i <= 10; i++ {
        wg.Add(1)
        go func(index int) {
            defer wg.Done()
            fmt.Println('协程', index, '开始执行')
            // 模拟协程执行时间
            for j := 1; j <= 100000000; j++ {}
            fmt.Println('协程', index, '执行完成')
        }(i)
    }

    // 等待所有协程执行完成
    wg.Wait()

    fmt.Println('所有协程执行完成')
}

在这个例子中,我们启动了 10 个协程,每个协程都会执行一个简单的任务,最后等待所有协程执行完成后输出一条消息。在每个协程中,我们调用了 wg.Add(1) 来增加计数器的值,表示有一个新的协程需要执行。在协程执行完成后,我们使用 defer wg.Done() 来将计数器减一,表示这个协程已经完成了。

在主函数中,我们使用 wg.Wait() 来等待所有协程执行完成。当计数器的值为 0 时,Wait 函数会返回,程序继续执行后续操作。

以上就是使用 WaitGroup 来实现多个协程执行并等待所有协程完成的方法。

Golang 协程管理:WaitGroup 实现并发执行与等待

原文地址: https://www.cveoy.top/t/topic/lCAT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录