我有一个循环,一直迭代直到工作开始运行:
ticker := time.NewTicker(time.Second * 2)
defer ticker.Stop()
started := time.Now()
for now := range ticker.C {
job, err := client.Job(jobID)
switch err.(type) {
case DoesNotExistError:
continue
case InternalError:
return err
}
if job.State == "running" {
break
}
if now.Sub(started) > time.Minute*2 {
return fmt.Errorf("timed out waiting for job")
}
}
在生产环境中非常好用。唯一的问题是它会使我的测试变慢。所有测试在完成之前都要等待至少2秒钟。是否有办法让time.Tick立即开始计时?
job.State竞态条件是什么?假设job是一个共享对象吗? - Xavijob是来自于 for 循环外部。 - JimB