stario/fn.go

56 lines
979 B
Go
Raw Normal View History

2021-09-01 11:03:02 +08:00
package stario
import (
"errors"
"time"
)
var ERR_TIMEOUT = errors.New("TIME OUT")
2021-11-12 16:01:35 +08:00
func WaitUntilTimeout(tm time.Duration, fn func(chan struct{}) error) error {
2021-09-01 11:03:02 +08:00
var err error
finished := make(chan struct{})
imout := make(chan struct{})
go func() {
err = fn(imout)
finished <- struct{}{}
}()
select {
case <-finished:
return err
case <-time.After(tm):
close(imout)
return ERR_TIMEOUT
}
}
2021-11-12 16:01:35 +08:00
func WaitUntilFinished(fn func() error) <-chan error {
2021-09-01 11:03:02 +08:00
finished := make(chan error)
go func() {
err := fn()
finished <- err
}()
return finished
}
2021-11-12 16:01:35 +08:00
func WaitUntilTimeoutFinished(tm time.Duration, fn func(chan struct{}) error) <-chan error {
2021-09-01 11:03:02 +08:00
var err error
finished := make(chan struct{})
result := make(chan error)
imout := make(chan struct{})
go func() {
err = fn(imout)
finished <- struct{}{}
}()
go func() {
select {
case <-finished:
result <- err
case <-time.After(tm):
close(imout)
result <- ERR_TIMEOUT
}
}()
return result
}