context结束子go程

    技术2024-05-07  14

    fmt.Println("main 函数 开始...") go func() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() fmt.Println("父 协程 开始...") go func(ctx context.Context) { for { for { select { case <-ctx.Done(): fmt.Println("子 协程 接受停止信号...") return default: fmt.Println("子 协程 执行中...") timer := time.NewTimer(time.Second * 2) <-timer.C } } } }(ctx) time.Sleep(time.Second*5) fmt.Println("父 协程 退出...") }() time.Sleep(time.Second*10) fmt.Println("main 函数 退出")

    执行结果 main 函数 开始… 父 协程 开始… 子 协程 执行中… 子 协程 执行中… 子 协程 执行中… 父 协程 退出… 子 协程 接受停止信号… main 函数 退出

    Processed: 0.011, SQL: 9