采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
上一次面试的面试题,超时通知,怎么通知子协程结束任务,我按照下面的逻辑大概写了下,
老师啥办法,可以父协程超时了,子协程不运行了,怎么才能做到呢,
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(),
.Second*3)
wg.Add(1)
go func(ctx context.Context) {
defer wg.Done()
for
{
select {
case
<-ctx.Done():
fmt.Println(
"Cancelled"
,
.Now())
return
<-
.After(
.Second * 10):
"time.After done"
}
}(ctx)
wg.Wait()
"time cost"
.Since(t).Milliseconds())
登录后可查看更多问答,登录/注册
GO工程师面试与技能提升专题课程
241 6
192 5
350 5
220 4
434 3
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号