gpt4 book ai didi

go - 如何定期安排任务?

转载 作者:IT王子 更新时间:2023-10-29 01:22:58 24 4
gpt4 key购买 nike

是否有任何本地库或第三方支持,例如 java native library 在 go lang 的 ScheduledExecutorService 用于生产用例?

请在 java 1.8 中找到代码片段:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;


public class TaskScheduler {

/**
* @param args
*/
public static void main(String[] args) {
Runnable runnable = ()-> {
// task to run goes here
System.out.println("Hello !!");
};
ScheduledExecutorService service = Executors.newScheduledThreadPool(1);
service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);

}

}

它会每隔一秒打印一次Hello !!

最佳答案

无需使用第 3 方库即可实现。只需利用 goroutine 并使用 time 包中可用的 time.Sleep() API,即可获得完全相同的结果。

例子:

go func() {
for true {
fmt.Println("Hello !!")
time.Sleep(1 * time.Second)
}
}()

Playground :https://play.golang.org/p/IMV_IAt-VQX


使用代码 #1 的示例

根据 Siddhanta 的建议。这是一个使用 ticker 实现相同结果的示例(取自 go documentation page of ticker ,根据您的要求进行一些修改)。

done := make(chan bool)
ticker := time.NewTicker(1 * time.Second)

go func() {
for {
select {
case <-done:
ticker.Stop()
return
case <-ticker.C:
fmt.Println("Hello !!")
}
}
}()

// wait for 10 seconds
time.Sleep(10 *time.Second)
done <- true

ticker时间信息(Hello !!执行的时间)可以从ticker.C channel 获取。

case t := <-ticker.C:
fmt.Println(t)

Playground :https://play.golang.org/p/TN2M-AMr39L


使用代码 #2 的示例

股票代码的另一个简化示例,摘自 https://gobyexample.com/tickers

ticker := time.NewTicker(1 * time.Second)
go func() {
for range ticker.C {
fmt.Println("Hello !!")
}
}()

// wait for 10 seconds
time.Sleep(10 *time.Second)
ticker.Stop()

关于go - 如何定期安排任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53057237/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com