NewWorker starts nWorkers goroutines running fn on incoming items sent on the returned channel. fn may block; writes to the channel will buffer. If nWorkers is negative, a new goroutine running fn is called for each item sent on the returned channel. When the returned channel is closed, fn is called with (nil, false) after all other calls to fn have completed. If nWorkers is zero, NewWorker will panic.