利用select为读channel设置超时
使用<- chan
或for range
循环从通道中读取数据都是会阻塞。
有时,您想为从某个通道读取数据设定时间限制。
这就需要使用select
了:
我们来深入了解一下这是如何工作的:
time.After 返回的是一个时间类型的channel,在给定时间之后(上例是100毫秒),将会有值被放入通道。我们称其为超时通道。
我们并不关心会从超时通道读取到什么值。我们仅关心是否有值被发送到该通道。
我们使用
select
在2个通道上等待:一个是chResult
,另一个是超时通道。select
将在从任意一个通道获取到值时就结束。我们要么在超时之前从
chResult
获取到值,要么过期之后从超时通道获取到值。
最后更新于