我希望在超时时停止goroutine执行。但似乎对我不起作用。我正在使用iris
框架。
type Response struct {
data interface{}
status bool
}
func (s *CicService) Find() (interface{}, bool) {
ch := make(chan Response, 1)
go func() {
time.Sleep(10 * time.Second)
fmt.Println("test")
fmt.Println("test1")
ch <- Response{data: "data", status: true}
}()
select {
case <-ch:
fmt.Println("Read from ch")
res := <-ch
return res.data, res.status
case <-time.After(50 * time.Millisecond):
return "Timed out", false
}
}
输出:
Timed out
test
test1
期望输出:
Timed out
有人能指出这里缺少了什么吗?它确实超时了,但仍然运行goroutine以打印 test
和 test1
。我只想在超时时尽快停止goroutine的执行。
case <-time.After(50 * time.Second)
,你也永远无法从ch
中读取数据。 - MikeKlemin<-time.After(10*time.Second)
并将其添加到 select 语句中。这样甚至可以中断睡眠。 - colm.anseotime.Sleep
有用。如果有一个长时间运行的函数,它无法中断它(没有提前终止)。示例。这个例子中没有打印输出。请使用得票最高的答案。 - Logan W