golang 怎么等待协程完成
在 Golang 中等待协程完成可以使用 WaitGroup 和 Channel 两种方式。
- 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")
}
- 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")
}
原文地址: https://www.cveoy.top/t/topic/ueu 著作权归作者所有。请勿转载和采集!