当前位置: 首页 > 面试题库 >

有没有办法定期执行重复性任务?

董阳平
2023-03-14
问题内容

有没有办法在Go中执行重复的后台任务?我在想类似Timer.schedule(task, delay, period)Java
的东西。我知道我可以使用goroutine和来做到这一点Time.sleep(),但是我想要一些容易停止的东西。

这就是我得到的,但是对我来说看起来很丑。有没有更清洁/更好的方法?

func oneWay() {
    var f func()
    var t *time.Timer

    f = func () {
        fmt.Println("doing stuff")
        t = time.AfterFunc(time.Duration(5) * time.Second, f)
    }

    t = time.AfterFunc(time.Duration(5) * time.Second, f)

    defer t.Stop()

    //simulate doing stuff
    time.Sleep(time.Minute)
}

问题答案:

功能time.NewTicker使通道发送定期消息,并提供了一种停止该消息的方法。使用它像这样(未经测试):

ticker := time.NewTicker(5 * time.Second)
quit := make(chan struct{})
go func() {
    for {
       select {
        case <- ticker.C:
            // do stuff
        case <- quit:
            ticker.Stop()
            return
        }
    }
 }()

您可以通过关闭quit频道来停止工作人员:close(quit)



 类似资料:
  • 问题内容: 我在代码中有很多地方可以处理Alamofire请求/响应。 由于某些间歇性问题(最常见的是不稳定的网络),每个请求都可能失败。 我希望能够在重试前重试请求3次。 直接的方法是拥有类似的东西 但是,出于多种原因,我不喜欢这种方法。最明显的是,我将需要为每种请求类型实现这样的代码(并且我有15种这样的代码)。 我很想知道是否有办法做类似的事情(变化很小且非侵入性) 问题答案: 通过Swif

  • 问题描述 我想在Type cript中的接口中定义两个可选属性。这两个属性中的一个并且只有一个必须存在于此接口的实例对象中。 我试过什么 当前解决方案的问题 虽然当前解决方案确保必须存在两个属性之一,即和,但它不会使它们相互排斥。也就是说,和都可能存在于实例对象中,它仍然会通过当前接口检查。 问题示例 以下是 接口实例的示例,其中对象同时包含和,并且 linter 仍然不显示任何错误:

  • 我解释我这篇文章的目标。 实际上,我想重写如何Android工作的基本上,与应用程序中的字符串。此时此刻,我可以从重写android资源中动态更改它 实际上,我有这个功能,只有当我使用时才能正常工作: 有一种简单的方法,不需要太多代码,就可以覆盖xml中的行为?

  • 我在B4中使用了“table hover”,是否有任何方法可以将href添加到被悬停的表行中,以便它们实际上可以点击?

  • 背景: 所以我有一个方法调用,我想保存到一个文本文件中。这样做的目的是将可运行的序列化对象保存到文本文件中,并在以后从文本文件中获取要执行的对象。 错误是: 我理解错误,Runnable是一个接口,它不能被序列化。然而,我还能做些什么来解决我的问题吗? 解决方案尝试1。错误

  • 问题内容: 有没有办法从Amazon Redshift执行SQL转储? 您可以使用SQL Workbench / J客户端吗? 问题答案: 我们当前正在Redshift上成功使用Workbench / J。 关于转储,尽管始终可以通过查询来提取数据,但在Redshift中目前没有可用的模式导出工具(pg_dump不起作用)。 希望对您有所帮助。 编辑: 请记住,诸如排序和分配键之类的内容不会反映在