forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
1package queue 2 3type Job struct { 4 Run func() error 5 OnFail func(error) 6} 7 8type Queue struct { 9 jobs chan Job 10} 11 12func NewQueue(size int) *Queue { 13 return &Queue{ 14 jobs: make(chan Job, size), 15 } 16} 17 18func (q *Queue) Enqueue(job Job) bool { 19 select { 20 case q.jobs <- job: 21 return true 22 default: 23 return false 24 } 25} 26 27func (q *Queue) StartRunner() { 28 go func() { 29 for job := range q.jobs { 30 if err := job.Run(); err != nil { 31 if job.OnFail != nil { 32 job.OnFail(err) 33 } 34 } 35 } 36 }() 37}