golang典型的select的超时机制实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/glw0223/article/details/88780313

典型的select的超时机制实现

timeout := make(channel bool)
go func(){
    time.Sleep(1000 * time.Millisecond)
    timeout <- true
}()

for {
    select {
    case <-ch:
    case <-timeout:
    }
}
// 超时控制的经典实现
func chan_time_out_handler(ch chan int)  (item bool){
    // 使用 select 为channel实现超时机制, select的一个case必须是一个面向channel的操作
    // 定义一个time_out chan
    timeOut := make(chan bool, 1)
    go func(){
        time.Sleep(1e9) // 等待一秒钟
        timeOut<- true
    }()
    // 利用time_out这个chan实现超时之后做何操作
    select {
        case a := <- ch: // 尝试从ch这个chan中读取数据
            fmt.Println(a)
            return true
        case <- timeOut: // 在等待时间范围内一直没有从ch中读取到了数据但是从time_out 这个 chan 中读取到了数据
            return false
    }
}

猜你喜欢

转载自blog.csdn.net/glw0223/article/details/88780313