48 lines
1.1 KiB
Markdown
48 lines
1.1 KiB
Markdown
# cycle-scheduler
|
|
|
|
cycle-scheduler is a simple scheduler lib, handling tasks and executes them at regular interval. If a task is not in desired state, the task is re-scheduled.
|
|
|
|
**NOTE**: this should be not used for long-running tasks, it's more suitable for shorts tasks like polling etc...
|
|
|
|
## Examples
|
|
* Init a new scheduler with 4 workers
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
scheduler "gitea.thegux.fr/rmanach/cycle-scheduler.git"
|
|
)
|
|
|
|
func main() {
|
|
ctx, fnCancel := context.WithCancel(context.Background())
|
|
s := scheduler.NewSchedulerCycle(ctx, 4)
|
|
|
|
// add a task with an execution interval of 2 ms (executed every 2 ms)
|
|
// and a maximum duration of 30 second.
|
|
s.Delay(
|
|
func(ctx context.Context) (any, error) {
|
|
// ...
|
|
return nil, nil
|
|
},
|
|
scheduler.WithExecInterval(2*time.Millisecond),
|
|
scheduler.WithMaxDuration(30*time.Second),
|
|
)
|
|
|
|
// stop the program after 5 seconds
|
|
go func() {
|
|
time.Sleep(5 * time.Second)
|
|
fnCancel()
|
|
}()
|
|
|
|
<-ctx.Done()
|
|
<-s.Done()
|
|
}
|
|
```
|
|
|
|
**NOTE**: for `Delay` optionals arguments, check the `NewTask` method documentation for more details.
|
|
|
|
|