http-add-on/pkg/util/async.go

23 lines
295 B
Go

package util
import (
"fmt"
"time"
)
func WithTimeout(d time.Duration, f func() error) error {
errs := make(chan error)
defer close(errs)
go func() {
errs <- f()
}()
select {
case err := <-errs:
return err
case <-time.After(d):
return fmt.Errorf("timed out after %v", d)
}
}