在 Golang 中等待协程完成可以使用 WaitGroup 和 Channel 两种方式。

  1. WaitGroup

WaitGroup 是 Golang 中的一种同步原语,可以用来等待一组协程执行完成。WaitGroup 有三个方法:Add、Done、Wait。

  • Add(n int):表示要等待 n 个协程完成。
  • Done():表示一个协程已经完成。
  • Wait():表示等待所有协程完成。

下面是一个例子,使用 WaitGroup 等待两个协程执行完成:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup

    wg.Add(2)

    go func() {
        fmt.Println("Hello")
        wg.Done()
    }()

    go func() {
        fmt.Println("World")
        wg.Done()
    }()

    wg.Wait()

    fmt.Println("Done")
}
  1. Channel

Channel 是 Golang 中的另一种同步机制,可以用来在协程之间传递数据。我们可以在主协程中创建一个无缓冲的 Channel,然后在协程中将数据写入 Channel,主协程从 Channel 中读取数据,当所有协程都将数据写入 Channel 后,主协程就可以知道所有协程都执行完成了。

下面是一个例子,使用 Channel 等待两个协程执行完成:

package main

import (
    "fmt"
)

func main() {
    done := make(chan bool)

    go func() {
        fmt.Println("Hello")
        done <- true
    }()

    go func() {
        fmt.Println("World")
        done <- true
    }()

    <-done
    <-done

    fmt.Println("Done")
}
golang 怎么等待协程完成

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

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