小编慧心枫*_*慧心枫的帖子

golang 上下文中 withcancel 和 withtimeout 的不同之处

我是 Golang 的新手,当我学习 golang 的上下文部分时,我WithCancel有些困惑。WithTimeout

显示代码。

package main

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

func someHandler() {
    //ctx, cancel := context.WithCancel(context.Background())
    ctx, cancel := context.WithTimeout(context.Background(),  2*time.Second)
    go doSth(ctx)

    time.Sleep(3 * time.Second)
    cancel()
}

func doSth(ctx context.Context) {
    var i = 1
    for {
        time.Sleep(1 * time.Second)
        select {
        case <-ctx.Done():
            fmt.Println("done")
            return
        default:
            fmt.Printf("work %d seconds: \n", i)
        }
        i++
    }
}

func main() {
    fmt.Println("start...")
    someHandler()
    fmt.Println("end.")
}
Run Code Online (Sandbox Code Playgroud)

结果:

// when use WithCancel
//
start...
work …
Run Code Online (Sandbox Code Playgroud)

go

4
推荐指数
1
解决办法
2205
查看次数

标签 统计

go ×1