如何获取时间。立即勾选

2024-04-20

我有一个迭代循环,直到作业启动并运行:

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立即勾选?


不幸的是,它seems https://github.com/golang/go/issues/17601Go 开发者在任何可预见的未来都不会添加此类功能,所以我们必须应对......

使用代码有两种常见方法:

for loop

鉴于这样的事情:

ticker := time.NewTicker(period)
defer ticker.Stop()
for <- ticker.C {
    ...
}

Use:

ticker := time.NewTicker(period)
defer ticker.Stop()
for ; true; <- ticker.C {
    ...
}

for-select loop

鉴于这样的事情:

interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt)

ticker := time.NewTicker(period)
defer ticker.Stop()

loop:
for {
    select {
        case <- ticker.C: 
            f()
        case <- interrupt:
            break loop
    }
}

Use:

interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt)

ticker := time.NewTicker(period)
defer ticker.Stop()

loop:
for {
    f()

    select {
        case <- ticker.C: 
            continue
        case <- interrupt:
            break loop
    }
}

为什么不直接使用time.Tick()?

虽然 Tick 对于不需要关闭 Ticker 的客户端很有用,但请注意,如果没有办法关闭它,底层 Ticker 就无法被垃圾收集器恢复;它“泄漏”。

https://golang.org/pkg/time/#Tick https://golang.org/pkg/time/#Tick

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取时间。立即勾选 的相关文章

随机推荐

  • 参数类型可能寿命不够长?

    以下代码段给我一个错误 use std rc Rc Definition of Cat Dog and Animal see the last code block type RcAnimal Rc
  • 使用 XOAUTH IMAP 访问 Gmail 收件箱

    我正在关注example http code google com p google mail xoauth tools source browse trunk python xoauth py 我已经授权了我的应用程序 获得了访问令牌 但
  • 即使密钥存在,S3 也会给我 NoSuchKey 错误

    这是我的 boto3 命令 用于从 S3 存储桶获取具有特定密钥的对象 resp s3client get object Bucket lt gt lt gt Key MzA1MjY1NzkzX2QudHh0 它给出以下错误 botocor
  • 将 createView 与allowDiskUse 结合使用

    在 mongo 聚合框架中可以使用该选项 allowDiskUse true 当一些繁重的操作 例如排序 无法在内存中执行时 这非常有用 我正在尝试做同样的事情createView 在 Mongo 3 4 中可用 但我找不到地方allowD
  • 在 C 中捕获 Ctrl-C

    How does one catch Ctrl C in C 使用信号处理程序 这是一个简单的例子 翻转bool用于main include
  • 如何阻止 parseFloat() 将零剥离到小数点右侧

    我有一个函数 用于从字符串中删除不需要的字符 定义为货币符号 然后将值作为数字返回 返回值时 我进行以下调用 return parseFloat x 我遇到的问题是 当 x 0 00 时 我期望得到 0 00 带有两位小数的浮点数 我得到的
  • HQL(Hibernate)如何检查一个元素列表是否是另一个列表的子集?

    我很难创建一个 HQL 查询来检查表 X 的记录 a 列表是否包含在同一表 X 的另一个列表 b 中 这是我正在使用的一个例子 select r from Role r where select p from Permission p wh
  • 表单验证禁用提交按钮,直到 WPF 中的所有字段均已填写

    鉴于 WPF 4 0 基于桌面的应用程序 基本输入形式有两个TextBox字段和提交按钮 XAML 代码
  • Visual Studio 2017 不突出显示错误

    我最近从 Visual Studio 2012 升级到 2017 更新到版本 15 3 5 并且 IDE 出现一些问题 在某个项目中 我没有得到错误下划线 在错误列表窗格中 仅构建 实际上显示more比 Build IntelliSense
  • 合并两个具有相同数字键的 PHP 数组[重复]

    这个问题在这里已经有答案了 尝试合并具有相同数字键的两个数组时遇到一些困难 我努力了array merge and array merge recursive 但似乎所做的只是附加第二个数组 第一个数组具有以下形式 Array 384 gt
  • 编辑时更改 NSTextField 边框和 BG 颜色

    我有一个NSTextField显示时不使用边框和窗口背景颜色 但我希望在编辑时将其更改为具有默认边框和白色 BG 颜色 我知道我可以通过以下方式更改这些属性 nameTextField bezeled true nameTextField
  • 加速 solr 索引

    Solr 索引花费的时间太长 我使用的mysql有超过3000万条记录 我正在使用两级子查询 请向我建议索引数据的最佳实践 以便我可以加快该过程 查看Solr性能因素 http wiki apache org solr SolrPerfor
  • java中的验证码[重复]

    这个问题在这里已经有答案了 我想尝试用 Java 开发一个安全登录系统 我应该如何使用 Java 实现 CAPTCHA 我在 Java 中使用的三个验证码库是 JCaptcha 这是三者中最可配置的 并且有很好的文档记录 但无论如何 我们似
  • 使用 HTTPS 链接与 php 方法(file_get_contents、getimagesize)

    当我尝试读取网站中的某些 HTTPS 网址时遇到问题 如果我使用 http 则没有问题 使用file get contents和curl 但是当我用 https 替换 http 时 这些方法不起作用 我收到一些错误 failed to op
  • 调整 R Markdown PDF 文档中文本和块输出之间的间距

    我无法理解如何控制 R Markdown PDF 文档中文本和块输出之间的间距 下面是一个文档的示例 output pdf document setlength lineskip 0pt begin center Random Text e
  • UICollectionView - 在单元格之间画一条线

    如何在 UICollectionView 中的单元格之间绘制一条跨越空间的线 预期的输出是这样的 我所做的最好的事情就是在每个单元格内添加行 如何连接穿过空间的线 我做了一个扩展 你可以像这样使用 collectionView drawLi
  • 使用 Jackson 序列化类型化集合时出错

    我正在尝试使用混合序列化集合 但杰克逊不会保存类型信息 这是一个基本测试 说明会发生什么 public class CollectionSerializationTest interface Common extends Serializa
  • GitHub Actions 使用从 shell 设置的变量

    Goal 在 GitHub Actions 中 从 shell 动态定义我的提交消息 name Commit changes uses EndBug add and commit v7 with message added on date
  • Golang:带有 -> 字符的命令行参数

    我需要接受命令行参数来运行以下格式的 Go 程序 go run app go 1 gt A 我在用os Args 1 但它只接受到 1 gt A 被跳过 非常感谢任何解决此问题的帮助 Thanks 你的 shell 正在解释 gt as I
  • 如何获取时间。立即勾选

    我有一个迭代循环 直到作业启动并运行 ticker time NewTicker time Second 2 defer ticker Stop started time Now for now range ticker C job err