hmn/src/jobs/jobs.go

41 lines
561 B
Go

package jobs
type Job struct {
C <-chan struct{}
rawC chan struct{}
}
func New() Job {
return newFromChannel(make(chan struct{}))
}
func (j *Job) Done() {
close(j.rawC)
}
// Combines multiple jobs into one.
func Zip(jobs ...Job) Job {
out := make(chan struct{})
go func() {
for _, job := range jobs {
<-job.C
}
close(out)
}()
return newFromChannel(out)
}
// Returns a job that is already done.
func Noop() Job {
job := New()
job.Done()
return job
}
func newFromChannel(c chan struct{}) Job {
return Job{
C: c,
rawC: c,
}
}