func worker(ctx context.Context, jobs <-chan Job, results chan<- Result) { for { select { case <-ctx.Done(): return case job, ok := <-jobs: if !ok { return } result := process(job) select { case results <- result: case <-ctx.Done(): return } } } }