taskout
is a lightweight task scheduling library for Go, inspired by JavaScript's setTimeout
and setInterval
functionalities. It enables developers to easily create one-shot or recurring tasks with flexible scheduling and lifecycle management.
SetTimeout
: Schedule a task to run once after a specified duration.SetInterval
: Schedule a recurring task to execute at regular intervals.Cancel
: Cancel scheduled tasks at any time.Extend
: Extend the duration of a one-shot task or modify a recurring task interval.Execute
: Trigger a task to execute immediately.
go get github.com/kisshan13/taskout
Schedule a one-shot task to execute after a delay:
package main
import (
"fmt"
"time"
"github.com/kisshan13/taskout"
)
func main() {
tm := taskout.NewTaskManager()
taskID := tm.SetTimeout(func(ctx context.Context) {
fmt.Println("One-shot task executed")
}, 5*time.Second)
time.Sleep(6 * time.Second) // Wait for the task to complete
fmt.Println("Task Completed:", taskID)
}
Schedule a recurring task to run at regular intervals:
package main
import (
"fmt"
"time"
"github.com/kisshan13/taskout"
)
func main() {
tm := taskout.NewTaskManager()
taskID := tm.SetInterval(func(ctx context.Context) {
fmt.Println("Recurring task executed")
}, 2*time.Second)
time.Sleep(10 * time.Second) // Allow the task to execute multiple times
tm.Cancel(taskID, func() {
fmt.Println("Recurring task canceled")
})
}
Extend the duration of a task. For one-shot or timeout task it will overwrite the timeout period and for interval based task it overwrite the interval period.
package main
import (
"fmt"
"time"
"github.com/kisshan13/taskout"
)
func main() {
tm := taskout.NewTaskManager()
taskID := tm.SetTimeout(func(ctx context.Context) {
fmt.Println("One-shot task executed after extension")
}, 5*time.Second)
time.Sleep(3 * time.Second) // Wait before extending
tm.Extend(taskID, 5*time.Second) // Extend the task duration
time.Sleep(6 * time.Second) // Wait for the extended duration
}
You can trigger a task to execute immediately: (NOTE : Interval Tasks will removed from the tasks after a successful execution)
package main
import (
"fmt"
"time"
"github.com/kisshan13/taskout"
)
func main() {
tm := taskout.NewTaskManager()
taskID := tm.SetTimeout(func(ctx context.Context) {
fmt.Println("One-shot task executed early")
}, 10*time.Second)
tm.Execute(taskID) // Trigger the task immediately
}
Contributions are welcome! Follow these steps to contribute:
- Fork the repository: github.com/kisshan13/taskout
- Create your feature branch: git checkout -b feature/my-feature
- Commit your changes: git commit -m "Add my feature"
- Push to the branch: git push origin feature/my-feature
- Open a pull request
If you find any bugs or have feature requests, please open an issue on the GitHub Issues page.
This project is licensed under the MIT License.
This project was inspired by JavaScript's setTimeout
and setInterval
functionalities, adapted to provide lightweight task scheduling in Go.