go如何控制一个函数只执行30S
func handle(ffc func(ctx context.Context) interface{}, pfc func(data interface{}) error, ch chan interface{}, timeout time.Duration) (err error) {
donec := false
go func() {
info := ffc(context.TODO()) //执行写入到ch的逻辑
if !donec {
ch <- info
}
}()
select {
case msg, ok := <-ch:
if ok {
//pfc 里面实现自己的业务 如加锁等
return pfc(msg) //出ch的逻辑
}
break
case <-time.After(timeout): //多少秒内没处理完毕 做报警处理
//报警业务 donec = true
return errors.New("time out")
}
return nil
}
2 回答1.4k 阅读
2 回答1.5k 阅读
2 回答1.3k 阅读
2 回答1.3k 阅读
3 回答898 阅读
2 回答1.1k 阅读
2 回答1.1k 阅读
可以用context.WithTimeout或者context.WithDeadline