Pet*_*vic 4 timeout channel go
我的代码如下所示:
outChannel := make(chan struct{})
...
for out := range outChannel {
...
}
Run Code Online (Sandbox Code Playgroud)
我有一个生产者写入outChannel并希望在读取时超时(如果整体处理时间超过 XX 秒)。这样做的正确方法是什么?
由于我只看到构造(在: https: //github.com/golang/go/wiki/Timeouts)与从通道读取的select多个s 一起使用,但是,一旦使用,这似乎不适用。caserange
您想做类似的事情,但对整个循环使用单个超时通道:
const timeout = 30 * time.Second
outc := make(chan struct{})
timec := time.After(timeout)
RangeLoop:
for {
select {
case <-timec:
break RangeLoop // timed out
case out, ok := <-outc:
if !ok {
break RangeLoop // Channel closed
}
// do something with out
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1484 次 |
| 最近记录: |