опенсорс проекте и не понимаю зачем нужен бесконечный for. Чел на мой вопрос пишет: "because it's infinite loop it needs to check internalQueue channels until timeout occurs"
ch := make(chan bool)
t := time.AfterFunc(timeout, func() { ch <- false })
defer func() {
t.Stop()
close(ch)
}()
for {
select {
case queue <- job:
return true
case <-ch:
return false
}
}
А я не понимаю чем это не угодило
select {
case queue <- job:
return true
case <-time.After(timeout):
return false
}
Выглядит так что for здесь не нужен
Точно не нужен
это какой опенсорс?
https://github.com/ahmetask/worker/blob/master/dispatcher.go#L112 шедулер задач нужен был, нашел простенькую, а там такой код, засомневался в собственных знаниях
Поймал панику. panic: send on closed channel goroutine 33 [running]: github.com/ahmetask/worker.(*Pool).EnqueueWithTimeout.func1() /root/go/src/github com/ahmetask/worker/dispatcher.go:106 +0x36 created by time.goFunc /usr/local/go/src/time/sleep.go:166 +0x45
Там гонка в коде между срабатыванием таймера его остановкой. Не используйте такую библиотеку 🙂
Обсуждают сегодня