请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

context 超时问题

上一次面试的面试题,超时通知,怎么通知子协程结束任务,我按照下面的逻辑大概写了下,

图片描述

老师啥办法,可以父协程超时了,子协程不运行了,怎么才能做到呢,

正在回答 回答被采纳积分+3

1回答

少林码僧 2023-11-01 19:15:24

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())
}




1 回复 有任何疑惑可以回复我~

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信