func main() {
select{
case<-time.After(1*time.Second):
fmt.Println("timeout")
default:
//fmt.Println("doWork")
time.Sleep(2*time.Second)
fmt.Println("done")
}
fmt.Println("end")
}
运行结果:
doWork
done
end
计划当工作时间过长时,实现超时退出。测试发现,这段逻辑中定时并不能触发提前退出。如何才能实现阻塞调用中的超时退出?谢谢
有疑问加站长微信联系(非本文作者)

使用 context ,https://studygolang.com/articles/13676
话说作为一个程序员,Markdown 都还不会用吗?
谢谢@polaris回复,我找了个context代码。测试结果还是没有符合预期。感觉根本原因是select是同步循环。对于阻塞没有办法控制。
你这个原因应该是:time.sleep会阻塞当前协程,没有cpu时间片来执行,所以你上面那个超时控制,也不好使,个人理解
我也是这样理解,当协程里做了非常耗时或迟迟不能返回的阻塞操作。是没有办法中止的。