新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame gtimer-基本使用
基本示例
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 {}
}
執(zhí)行后,輸出結果為:

創(chuàng)新互聯(lián)成立與2013年,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目成都網(wǎng)站設計、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元西固做網(wǎng)站,已為上家服務,為西固各地企業(yè)和個人服務,聯(lián)系電話: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 {}
}執(zhí)行后,輸出結果為:
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*?相關方法實現(xiàn)延遲任務的創(chuàng)建。
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 {}
}執(zhí)行后,終端輸出:
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
...SetTimeout與SetInterval
這兩個方法來源于?Javascript?常用定時方法。其中?SetTimeout?用于創(chuàng)建只執(zhí)行一次的定時任務,不過可以通過遞歸調(diào)用?SetTimeout?來實現(xiàn)無限間隔執(zhí)行。?SetIterval?用于創(chuàng)建間隔執(zhí)行不退出的定時任務。
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 {}
}執(zhí)行后,終端輸出:
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退出
我們可以在定時任務中通過?Exit?方法強制退出定時任務的繼續(xù)執(zhí)行,該定時任務將會被從定時器中移除。
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 {}
}執(zhí)行后,終端輸出:
exit: 2021-05-27 13:31:24 網(wǎng)站標題:創(chuàng)新互聯(lián)GoFrame教程:GoFrame gtimer-基本使用
標題URL:http://m.fisionsoft.com.cn/article/dpocogo.html


咨詢
建站咨詢
