码迷,mamicode.com
首页 > 其他好文 > 详细

使用context关闭协程以及协程中的协程

时间:2018-10-24 15:15:41      阅读:317      评论:0      收藏:0      [点我收藏+]

标签:cancel   bre   work   sleep   one   with   efault   time   import   

package main

import (
    "sync"
    "context"
    "fmt"
    "time"
)

var wg sync.WaitGroup

func worker2(ctx context.Context) {
    LOOP:
        for {
            fmt.Printf("worker2\n")
            time.Sleep(time.Second)
            select {
            case <- ctx.Done():
                break LOOP
            default:
            }
        }
}


func worker(ctx context.Context) {
    go worker2(ctx)
    LOOP:
        for {
            fmt.Printf("worker\n")
            time.Sleep(time.Second)
            select {
            case <- ctx.Done():
                break LOOP
            default:

            }
        }
    wg.Done()
}

func main() {
    ctx := context.Background()
    ctx, cancel := context.WithCancel(ctx)
    wg.Add(1)
    go worker(ctx)
    //time.Sleep(time.Second*3)
    cancel()
    wg.Wait()
}

使用context关闭协程以及协程中的协程

标签:cancel   bre   work   sleep   one   with   efault   time   import   

原文地址:https://www.cnblogs.com/Csir/p/9842537.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!