A simple work queue manager to schedule jobs and then execute them on a defined pool of goroutines.
It can be used in two modes:
- static: allows to create a job queue and then run it waiting for all jobs to complete;
- dynamic: allows to run a job scheduler and then enqueue new jobs while the scheduler runs.
wq := New[MyResult](2)
wq.Push(func(ctx context.Context) (MyResult, error) {
// do something...
return MyResult{}, nil
})
results, errors := wq.RunAll(context.TODO())
wq := New[MyResult](2)
go func(ctx context.Context) {
wq.Start(ctx)
}(context.TODO())
wq.Schedule(func(ctx context.Context) (MyResult, error) {
// do something...
return nil
})
// Wait until all jobs have been completed.
_ := wq.Shutdown()