如何使用 Context 同步多个 Go 例程
为了同步多个 goroutine,允许它们在其中一个返回时终止,context 提供了一个有效的
说明:
示例代码创建了两个 goroutine。为了同步它们,将启动 context.Context 并将其提供给两个 goroutine。每个 goroutine 都会进入一个 select {} 循环,监听来自上下文的消息。
当发生错误或满足特定条件时:
代码示例:
package main import ( "context" "sync" ) func main() { ctx, cancel := context.WithCancel(context.Background()) wg := sync.WaitGroup{} wg.Add(3) go func() { defer wg.Done() for { select { // msg from other goroutine finish case <-ctx.Done(): // end } } }() go func() { defer wg.Done() for { select { // msg from other goroutine finish case <-ctx.Done(): // end } } }() go func() { defer wg.Done() // your operation // call cancel when this goroutine ends cancel() }() wg.Wait() }
使用优点上下文:
以上是如何使用上下文优雅地终止多个 Go 例程?的详细内容。更多信息请关注PHP中文网其他相关文章!