1 runner/runner.go
package runner
import ("errors"
"os"
"os/signal"
"time"
)
type Runner struct {
interrupt chan os.Signal //接收信号的通道
complete chan error //接收完成的通道
timeout <-chan time.Time //接收超时的通道
tasks []func(int) //任务数组,保存的是函数,函数作为一个元素使用。
}
//统一错误
var ErrTimeout = errors.New("received timeout")
var ErrInterrupt = errors.New("received interrupt")
//
func New(d time.Duration) *Runner {
return &Runner {
interrupt:make(chan os.Signal, 1), //创建信号通道
complete: make(chan error), //任务完成通道
timeout:time.After(d), //返回一个时间通道,该通道在无操作时,d时间后激发超时
}
}
func