zoukankan      html  css  js  c++  java
  • Go如何cancel掉WithValue()的context

    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了。

    一个没有高级趣味的人。 email:hushui502@gmail.com
  • 相关阅读:
    css 分类+选择器
    emmet语法
    程序员能力矩阵
    时间管理

    java 内存 解析
    SQL 查询优化
    2016 书单计划
    ssh框架;
    Mybatis;
  • 原文地址:https://www.cnblogs.com/CherryTab/p/12422708.html
Copyright © 2011-2022 走看看