The concurrent channel is used by the task() method to signal when it's done. As it stands, it constrains how many go routines are running at the same time. If I remove the concurrent channel then all the go routines fire and finish. Not the behavior I need for my use case. I need to carefully control how many are go routines are working.
On the other hand, I could make it a bit more idiomatic by using a channel as a queue for the tasks. But I don't see how to ensure limits on how many go routines are in process without the concurrent channel acting as a throttle on the main routine distributing the work. In the meantime, I have found other pitches and talks, so I'll study some more before I begin coding this up for real.
Thanks for your feedback.