package main
import (
"context"
"fmt"
"github.com/GOgf/gf/v2/os/gctx"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/os/gtimer"
"time"
)
func main() {
var (
ctx = gctx.New()
now = time.Now()
)
gtimer.AddTimes(ctx, time.Second, 10, func(ctx context.Context) {
fmt.Println(gtime.Now(), time.Duration(time.Now().UnixNano()-now.UnixNano()))
now = time.Now()
})
select {}
}
执行后,输出结果为:
创新互联成立与2013年,是专业互联网技术服务公司,拥有项目成都网站设计、成都网站制作、外贸网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元西固做网站,已为上家服务,为西固各地企业和个人服务,联系电话:028-86922220
2021-05-27 13:28:19 1.004516s
2021-05-27 13:28:20 997.262ms
2021-05-27 13:28:21 999.972ms
2021-05-27 13:28:22 1.00112s
2021-05-27 13:28:23 998.773ms
2021-05-27 13:28:24 999.957ms
2021-05-27 13:28:25 1.002468s
2021-05-27 13:28:26 997.468ms
2021-05-27 13:28:27 999.981ms
2021-05-27 13:28:28 1.002504s
package main
import (
"context"
"github.com/gogf/gf/v2/os/gctx"
"github.com/gogf/gf/v2/os/glog"
"github.com/gogf/gf/v2/os/gtimer"
"time"
)
func main() {
var (
ctx = gctx.New()
interval = time.Second
)
gtimer.AddSingleton(ctx, interval, func(ctx context.Context) {
glog.Print(ctx, "doing")
time.Sleep(5 * time.Second)
})
select {}
}
执行后,输出结果为:
2021-11-14 11:50:42.192 {189cwi9mo40cfp73guzhugo100tnuedg} doing
2021-11-14 11:50:48.190 {189cwi9mo40cfp73guzhugo100tnuedg} doing
2021-11-14 11:50:54.192 {189cwi9mo40cfp73guzhugo100tnuedg} doing
2021-11-14 11:51:00.189 {189cwi9mo40cfp73guzhugo100tnuedg} doing
...
延迟任务是指在指定时间后生效的定时任务。我们可以通过DelayAdd*
相关方法实现延迟任务的创建。
package main
import (
"context"
"fmt"
"github.com/gogf/gf/v2/os/gctx"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/os/gtimer"
"time"
)
func main() {
var (
ctx = gctx.New()
delay = time.Second
interval = time.Second
)
fmt.Println("Start:", gtime.Now())
gtimer.DelayAdd(
ctx,
delay,
interval,
func(ctx context.Context) {
fmt.Println("Running:", gtime.Now())
},
)
select {}
}
执行后,终端输出:
Start: 2021-05-27 13:26:02
Running: 2021-05-27 13:26:04
Running: 2021-05-27 13:26:05
Running: 2021-05-27 13:26:06
Running: 2021-05-27 13:26:07
Running: 2021-05-27 13:26:08
Running: 2021-05-27 13:26:09
Running: 2021-05-27 13:26:10
Running: 2021-05-27 13:26:11
...
这两个方法来源于Javascript
常用定时方法。其中SetTimeout
用于创建只执行一次的定时任务,不过可以通过递归调用SetTimeout
来实现无限间隔执行。SetIterval
用于创建间隔执行不退出的定时任务。
package main
import (
"context"
"fmt"
"github.com/gogf/gf/v2/os/gctx"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/os/gtimer"
"time"
)
func main() {
var (
ctx = gctx.New()
timeout = time.Second
interval = time.Second
)
gtimer.SetTimeout(ctx, timeout, func(ctx context.Context) {
fmt.Println("SetTimeout:", gtime.Now())
})
gtimer.SetInterval(ctx, interval, func(ctx context.Context) {
fmt.Println("SetInterval:", gtime.Now())
})
select {}
}
执行后,终端输出:
SetInterval: 2021-05-27 13:20:50
SetTimeout: 2021-05-27 13:20:50
SetInterval: 2021-05-27 13:20:51
SetInterval: 2021-05-27 13:20:52
SetInterval: 2021-05-27 13:20:53
SetInterval: 2021-05-27 13:20:54
SetInterval: 2021-05-27 13:20:55
SetInterval: 2021-05-27 13:20:56
SetInterval: 2021-05-27 13:20:57
SetInterval: 2021-05-27 13:20:58
...
我们可以在定时任务中通过Exit
方法强制退出定时任务的继续执行,该定时任务将会被从定时器中移除。
package main
import (
"context"
"fmt"
"github.com/gogf/gf/v2/os/gctx"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/os/gtimer"
"time"
)
func main() {
var (
ctx = gctx.New()
)
gtimer.SetInterval(ctx, time.Second, func(ctx context.Context) {
fmt.Println("exit:", gtime.Now())
gtimer.Exit()
})
select {}
}
执行后,终端输出:
exit: 2021-05-27 13:31:24
标题名称:创新互联GoFrame教程:GoFrame gtimer-基本使用
URL标题:http://www.shufengxianlan.com/qtweb/news3/228853.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联