Taskout
Taskout is a lightweight task scheduling library for Go Language
Install / Use
/learn @kisshan13/TaskoutREADME
taskout
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.
Features
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.
Installation
go get github.com/kisshan13/taskout
Usage
Basic Example : SetTimeout
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)
}
Basic Example : SetInterval
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")
})
}
Extending a task
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
}
Triggering a Task Immediately
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
}
Contributing
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
Reporting Issues
If you find any bugs or have feature requests, please open an issue on the GitHub Issues page.
License
This project is licensed under the MIT License.
Acknowledgments
This project was inspired by JavaScript's setTimeout and setInterval functionalities, adapted to provide lightweight task scheduling in Go.
Related Skills
node-connect
351.8kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
110.9kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
351.8kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
351.8kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
