func (r *Runner) Run(f func()) <-chan struct{} {
	done := make(chan struct{})
	r.wg.Add(1)
	go func() {
		defer func() {
			r.wg.Done()
			close(done)
		}()
		f()
	}()
	return done
}
Run runs a function of type func() in a new goroutine.
The returned channel is closed when f returns
package runner
import (
	"context"
	"os"
	"os/signal"
	"sync"
)
func New(ctx context.Context) Runner {
	return Runner{Ctx: ctx}
}
type Runner struct {
	Ctx context.Context
	wg  sync.WaitGroup
}