Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

go如何控制一个函数只执行30S


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
493 views
Welcome To Ask or Share your Answers For Others

1 Answer

可以用context.WithTimeout或者context.WithDeadline

   p := context.TODO()
   c, _ := context.WithTimeout(p, 30*time.Second)
   wg := &sync.WaitGroup{}
   wg.Add(1)
   start := time.Now()
   go func(ctx context.Context) {
      defer wg.Done()
      for{
          select {
          case <-c.Done():
             return
          default:
             doSomething() 
          }
      }
   }(c)
   wg.Wait()
   fmt.Println(time.Since(start))

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...