采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
上一次面试的面试题,超时通知,怎么通知子协程结束任务,我按照下面的逻辑大概写了下,
老师啥办法,可以父协程超时了,子协程不运行了,怎么才能做到呢,
8-20 time.Sleep(d)与←time.After(d)有何区别?在这一节中有讲到这个问题,time.sleep()一旦执行是不支持取消的,可以使用time.After实现:
package main import ( "context" "fmt" "sync" "time" ) func main() { t := time.Now() var wg sync.WaitGroup ctx, _ := context.WithTimeout(context.Background(), time.Second*3) wg.Add(1) go func(ctx context.Context) { defer wg.Done() for { select { case <-ctx.Done(): fmt.Println("Cancelled", time.Now()) return case <-time.After(time.Second * 10): fmt.Println("time.After done", time.Now()) return } } }(ctx) wg.Wait() fmt.Println("time cost", time.Since(t).Milliseconds()) }
登录后可查看更多问答,登录/注册
GO工程师面试与技能提升专题课程
160 6
76 5
249 5
137 4
282 3