首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在golang中函数开始运行时立即执行ticker

如何在golang中函数开始运行时立即执行ticker
EN

Stack Overflow用户
提问于 2018-01-26 19:57:10
回答 2查看 2.4K关注 0票数 1

我希望在“每日检查”之前执行“每周更新”,如下所示。这意味着"time.Time“应该立即放入"timeChan”,而不是在主函数开始运行时等待超过两秒后才放入。

结果应该是这样的

代码语言:javascript
复制
weekly updated
daily check
daily check
daily check
daily check
weekly updated
daily check
daily check
daily check
daily check
...

当然,我可以先打印“每周更新”一次,但有一个优雅的方法吗?

代码如下

代码语言:javascript
复制
package main

import "time"
import "fmt"

func main() {
    var a int
    timeChan := time.NewTicker(time.Second * 2).C

    tickChan := time.NewTicker(time.Millisecond * 500).C

    for {
        select {
        case <-timeChan:
            fmt.Println("weekly updated")
            a = 1
        case <-tickChan:
            if a == 1 {
                fmt.Println("daily check")
            } else {
                fmt.Println("Not update?")
            }
        }
    }
}

结果如下所示

代码语言:javascript
复制
Not update?
Not update?
Not update?
weekly updated
daily check
daily check
daily check
daily check
weekly updated
daily check
daily check
daily check
daily check
...
EN

回答 2

Stack Overflow用户

发布于 2018-01-26 20:10:16

在第一次time.Millisecond时设置weekly的自动收费器。然后改变它,当它第一次完成时。

代码语言:javascript
复制
package main

import (
    "fmt"
    "time"
)

func main() {
    var a = 0

    ticker := time.NewTicker(1)
    timeChan := ticker.C
    tickChan := time.NewTicker(time.Millisecond * 500).C

    for {
        select {
        case <-timeChan:
            fmt.Println("weekly updated")
            if a == 0 {
                ticker.Stop()
                timeChan = time.NewTicker(time.Second * 2).C
            }
            a = 1
        case <-tickChan:
            if a == 1 {
                fmt.Println("daily check")
            } else {
                fmt.Println("Not update?")
            }
        default:
        }
    }
}

输出:

代码语言:javascript
复制
weekly updated
daily check
daily check
daily check
daily check
weekly updated
票数 3
EN

Stack Overflow用户

发布于 2018-01-26 23:21:03

只需将工作放在一个函数中并调用它。

代码语言:javascript
复制
var a int
timeChan := time.NewTicker(time.Second * 2).C
tickChan := time.NewTicker(time.Millisecond * 500).C
f := func() {
    fmt.Println("weekly updated")
    a = 1
}
f()
for {
    select {
    case <-timeChan:
        f()
    case <-tickChan:
        if a == 1 {
            fmt.Println("daily check")
        } else {
            fmt.Println("Not update?")
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48460922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档