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()
}
 
 

相关文章:

  • 2021-04-19
  • 2021-12-22
  • 2022-01-11
猜你喜欢
  • 2022-02-09
  • 2021-12-08
  • 2021-09-11
  • 2021-06-15
  • 2021-07-22
  • 2021-10-10
  • 2022-12-23
相关资源
相似解决方案