加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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...")
	}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读