目录
描述
WithTimeout是Go标准库context中的函数,它接受一个Context和一个超时时间作为参数,返回一个子Context和一个取消函数CancelFunc。取消函数CancelFunc将释放子Context与之有关的资源,因此在子Context中的相关操作一旦完成,应该立即调用取消函数CancelFunc。
也就是说,设定超时时间timeout后,返回的子Context的相关操作视为完成。可以使用Context.Done方法来判断子Context是否结束。
语法和参数
函数签名
func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc)
参数名称 | 含义 |
---|---|
parent | 父Context |
timeout | 超时时间 |
返回值:返回一个子Context和一个取消函数CancelFunc。
使用示例
通过Context.Done方法判断超时是否结束:
package main
import (
"context"
"fmt"
"time"
)
func main() {
ctx, cancel := context.WithTimeout(context.Background(), time.Second*3)
defer cancel()
for {
select {
case <- ctx.Done():
fmt.Println("timeout")
return
default:
fmt.Println("waiting...")
time.Sleep(time.Second)
}
}
}