如何优雅地等待 Go 例程完成
使用 Go 进行开发时,确保例程在退出程序之前完成至关重要。利用布尔通道(如提供的 Playground 链接中所示)可以有效地实现此目的。
理解通道操作
阻塞操作
处理死锁场景
取消注释最后一行,
替代方法
而布尔通道方法是一个简单的解决方案,sync 包提供了用于协调并发操作的附加选项。考虑以下代码:
package main import ( "fmt" "sync" "time" ) func main() { var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func() { longOp() wg.Done() }() } // Waits until all routines complete (wg.Done called 10 times) wg.Wait() } func longOp() { time.Sleep(time.Second * 2) fmt.Println("Long operation completed") }
在这种情况下,sync.WaitGroup 用于跟踪和同步并发例程,确保 main() 等待所有例程完成后再继续执行。
以上是如何优雅地等待 Go 例程完成:布尔通道 vs.sync.WaitGroup?的详细内容。更多信息请关注PHP中文网其他相关文章!