Skip to content
This repository has been archived by the owner on Apr 13, 2023. It is now read-only.

xgfone/go-task

Repository files navigation

go-task Build Status GoDoc License

It supplies some task runners to run the task. Support Go1.7+.

Installation

$ go get -u github.com/xgfone/go-task

Example

package main

import (
	"context"
	"fmt"
	"time"

	"github.com/xgfone/go-task"
)

type tasker struct {
	name string
}

func (t tasker) Name() string { return t.name }
func (t tasker) Run(ctx context.Context, now time.Time) (err error) {
	fmt.Printf("[%s] run task '%s'\n", now.Format(time.RFC3339), t.name)
	return
}

func newTask(name string) task.Task { return tasker{name: name} }

func runTask(ctx context.Context, now time.Time) (err error) {
	t := task.GetTaskFromCtx(ctx)
	fmt.Printf("[%s] run task '%s'\n", now.Format(time.RFC3339), t.Name())
	return
}

func main() {
	config := task.IntervalRunnerConfig{Tick: time.Second, Interval: time.Second * 3}
	runner := task.NewIntervalRunner(&config)

	// Add all the tasks
	runner.AddTask(newTask("task1"))                                        // Use Default Interval: 3s
	runner.AddTask(task.NewTask("task2", runTask))                          // Use Default Interval: 3s
	runner.AddTask(task.NewIntervalFuncTask("task3", time.Second, runTask)) // Use Special Interval: 1s

	// We only run the tasks for 10s.
	time.Sleep(time.Second * 10)
	runner.Stop()

	// Output:
	// [2021-06-03T23:41:14+08:00] run task 'task3'
	// [2021-06-03T23:41:14+08:00] run task 'task1'
	// [2021-06-03T23:41:14+08:00] run task 'task2'
	// [2021-06-03T23:41:16+08:00] run task 'task3'
	// [2021-06-03T23:41:17+08:00] run task 'task2'
	// [2021-06-03T23:41:17+08:00] run task 'task3'
	// [2021-06-03T23:41:17+08:00] run task 'task1'
	// [2021-06-03T23:41:19+08:00] run task 'task3'
	// [2021-06-03T23:41:20+08:00] run task 'task2'
	// [2021-06-03T23:41:20+08:00] run task 'task3'
	// [2021-06-03T23:41:20+08:00] run task 'task1'
	// [2021-06-03T23:41:22+08:00] run task 'task3'
}