首页 > 其他 > 详细

Go如何cancel掉WithValue()的context

时间:2020-03-05 21:43:55      阅读:115      评论:0      收藏:0      [点我收藏+]

Contex也是Go的一个特性,其实我还处于使用级别,这里有一个如何cancle掉withValue的contex示例

 

package main

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

func main() {
    //ctx, cancel := context.WithCancel(context.Background())
    ctx, _ := context.WithTimeout(context.Background(), 3 * time.Second)
    //ctx := context.WithValue(context.Background(), "huhu", "ssssss")
    go HandleRequest(ctx)

    time.Sleep(10 * time.Second)
    //cancel()
}

func HandleRequest(ctx context.Context) {
    go WriteDatabase(context.WithValue(ctx, "huhu", "hhhhh"))
    for {
        select {
        default:
            fmt.Println("HandleRequest running", ctx.Value("huhu"))    
        case <-ctx.Done():
            fmt.Println("HandleRquest Done")
            return
        }
    }
}

func WriteDatabase(ctx context.Context) {
    for {
        select {
        default:
            fmt.Println("WriteDatabase running", ctx.Value("huhu"))
        case <-ctx.Done():
            fmt.Println("WriteDatabase Done")
            return
        }
    }
}

 

这里还是上下文的特性,我们本质上是用的一个contex,父级cancel就ok了。

 

Go如何cancel掉WithValue()的context

原文:https://www.cnblogs.com/CherryTab/p/12422708.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!