zoukankan      html  css  js  c++  java
  • golang学习笔记——context库

    WithCancel(主进程控制子协程关闭)
    package main
     
    import (
        "context"
        "fmt"
        "sync"
        "time"
    )
     
    var wg sync.WaitGroup
     
    func f(ctx context.Context) {
        defer wg.Done()
        LOOP:
        for {
             fmt.Println("hello world")
             time.Sleep(time.Millisecond * 500)
             select {
             case <-ctx.Done():
                     break LOOP
             default:
             }
        }
    }
     
    func main() {
        ctx, cancel := context.WithCancel(context.Background())
        wg.Add(1)
        go f(ctx)
        time.Sleep(time.Second * 5)
        //通知子协程退出
        cancel()
        wg.Wait()
    }
     
    WithTimeout(超时关闭)
    package main
     
    import (
        "context"
        "fmt"
        "sync"
        "time"
    )
     
    var wg sync.WaitGroup
     
    func f(ctx context.Context) {
        defer wg.Done()
        LOOP:
        for {
             fmt.Println("hello world")
             time.Sleep(time.Millisecond * 500)
             select {
             case <-ctx.Done(): //50毫秒自动调用
                     break LOOP
             default:
             }
        }
    }
     
    func main() {
        ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)
        //通知子协程退出
        defer cancel()
        wg.Add(1)
        go f(ctx)
        time.Sleep(time.Second * 5)
        wg.Wait()
    }
     
    WithValue (key值不能为基础类型,应该用用户自定义的类型
    package main
     
    import (
        "context"
        "fmt"
        "sync"
        "time"
    )
     
    type cjp string
     
    var wg sync.WaitGroup
     
    func f(ctx context.Context) {
        defer wg.Done()
        LOOP:
        for {
             fmt.Println(ctx.Value(cjp("mt")))
             fmt.Println("hello world")
             time.Sleep(time.Millisecond * 500)
             select {
             case <-ctx.Done(): //50毫秒自动调用
                     break LOOP
             default:
             }
        }
    }
     
    func main() {
        ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)
        defer cancel()
        ctx = context.WithValue(ctx, cjp("mt"), "cuijiapeng")
        wg.Add(1)
        go f(ctx)
        time.Sleep(time.Second * 5)
        wg.Wait()
    }
     
     
  • 相关阅读:
    菜鸟二三事
    访问 IIS 元数据库失败的问题(转)
    SQL Server 2005/2008还原数据库时遇到的问题(转)
    ME54N审批、撤批触发增强点:ME_RE…
    南通网站建设整理:最新搜索引擎登录口保证都可以用
    调试mvc的源代码
    c#委托(delegate)揭秘
    ASP.NET 应用程序生命周期概述
    JavaScript Array(数组)对象
    jQuery.each
  • 原文地址:https://www.cnblogs.com/itsuibi/p/14490159.html
Copyright © 2011-2022 走看看