package main
import (
"fmt"
"time"
)
func DoBadThing(done chan bool) {
// 如果这个函数比 time.After执行的时间要长的话会执行,time.After中的函数
// 如果这个函数比 time.After执行的时间要短的话会执行,会执行这个函数并返回值
time.Sleep(time.Second)
done <- true
}
func timeout(f func(chan bool)) error {
// 在这里最好创建有缓存空间的chan
done := make(chan bool,1)
go f(done)
select {
case <-done:
fmt.Println("done")
return nil
case <-time.After(time.Second * 2):
return fmt.Errorf("timeout")
}
}
func main() {
err := timeout(DoBadThing)
if err != nil {
fmt.Println(err)
}
time.Sleep(time.Second * 3)
}
golang使用协成超时问题
最新推荐文章于 2024-08-21 05:08:21 发布