/Users/davywalker/go/pkg/mod/k8s.io/[email protected]/pkg/server/secure_serving.go:220
RunServer
新建一个协程来启动HTTPServer.
k8s.io/apimachinery/pkg/util/wait
import (
"context"
"fmt"
"k8s.io/apimachinery/pkg/util/wait"
"math/rand"
"time"
)
func Wait() {
ctx, cancel := context.WithCancel(context.Background())
_ = func() {
cancel()
}
rand.Seed(time.Now().UnixNano())
wait.UntilWithContext(ctx, doSomething, 1)
}
func doSomething(ctx context.Context) {
fmt.Println(time.Now(), "doSomething called")
n := rand.Intn(10000)
time.Sleep(time.Duration(n) * time.Millisecond)
fmt.Println(time.Now(), "Hello")
ctx.Deadline()
}
wait.UntilWithContext
是wait
包中的一个函数,它会按指定的时间间隔(本例中为1纳秒)重复执行doSomething
函数,直到上下文ctx
被取消。由于间隔设置为1纳秒,实际上操作会持续不断地执行,因为1纳秒是极短的时间。
会在当前主线程中持续不断地执行 doSomething
另外一种方式, 可以直接启动一个routine来不间断地执行:
go wait.UntilWithContext(ctx, doSomething, 0)
time.Sleep(5 * time.Second)