golang学习的点点滴滴:并发超时处理
发布时间:2020-12-16 19:25:25 所属栏目:大数据 来源:网络整理
导读:golang并没有在语言层次上提供超时操作,但可以通过一些小技巧实现超时。 原理: 并发一个函数,等待1s后向timeout写入数据,在select中如果1s之内有数据向其他channel写入则会顺利执行,如果没有,这是timeout写入了数据,则我们知道超时了。 packagemainim
golang并没有在语言层次上提供超时操作,但可以通过一些小技巧实现超时。 原理: 并发一个函数,等待1s后向timeout写入数据,在select中如果1s之内有数据向其他channel写入则会顺利执行,如果没有,这是timeout写入了数据,则我们知道超时了。 packagemain import"fmt" import"time" funcmain(){ ch:=make(chanint,1) timeout:=make(chanbool,1) //并发执行一个函数,等待1s后向timeout写入true gofunc(){ time.Sleep(1000) timeout<-true }() //这里会等待ch或timeout读出数据 //因为一直没有向ch写入数据 //在1s后向timeout写入了数据 //所以执行了timeout的case //利用这个技巧可以实现超时操作 select{ case<-ch: fmt.Println("readfromch") case<-timeout: fmt.Println("timeout...") } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |