版权声明:本文为博主原创文章,未经博主允许不得转载。 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
}
}