Go语言学习笔记-并发编程-Context与任务取消

Context

  1. 根context:通过context.background()来创建
  2. 子context:context.withCancel(parentContext)创建
    • ctx,cancel := context.WithCancel(context.Background())
  3. 当前context被取消时,基于当前context的子context都会被取消
  4. 接收取消通知:<-ctx.Done()
package cancel

import (
    "context"
    "fmt"
    "testing"
    "time"
)

func isCancelled(ctx context.Context) bool {
    select {
    case <-ctx.Done():
        return true
    default:
        return false
    }
}

func TestCancel(t *testing.T) {
    ctx, cancel := context.WithCancel(context.Background())
    for i := 0; i < 5; i++ {
        go func(i int, ctx context.Context) {
            for {
                if isCancelled(ctx) {
                    break
                }
                time.Sleep(time.Millisecond * 5)
            }
            fmt.Println(i, "Cancelled")
        }(i, ctx)
    }
    cancel()
    time.Sleep(time.Second * 1)
}

你可能感兴趣的:(Go语言学习笔记-并发编程-Context与任务取消)