golang 并发超时控制经典例子

package main 

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


func main() {

    ctx := context.Background()
    timeout := 50*time.Millisecond
    ctx, cancel := context.WithTimeout(ctx, timeout)
    
    defer cancel()

//开100个线程,超过100就会阻塞,达到高并发控制目的

    done := make(chan int,100)

    go func() {
        // do something  可以是其它耗时操作
        time.Sleep(1*time.Second)
        done<- 1
    }()

    select{
    case <-done:

//一个线程跑完
        fmt.Println("work done on time")
    case <-ctx.Done():
        // timeout  超时
        fmt.Println(ctx.Err())
    }


    fmt.Println("main exit...")
}
 

你可能感兴趣的:(golang)