У меня есть программа для длительной работы.Когда работа завершена, результаты передаются на канал.Тем временем, пока задание выполняется, я хочу постоянно обновлять API со статусом RUNNING.
Пока у меня есть следующий код:
func getProgressTimeout() <-chan time.Time {
return time.After(5 * time.Minute)
}
func runCommand(arg *Request) {
chanResult := make(chan Results)
go func(args *Request, c chan Results) {
resp, err := execCommand(args)
c <- Results{
resp: resp,
err: err,
}
}(arg, chanResult)
var err error
progressLoop:
for {
select {
case <-getProgressTimeout():
updateProgress() // this method will send status= RUNNING to a REST API
case out := <-chanResult:
err = jobCompleted(request, out)
break progressLoop
}
}
return err
}
Я новичок вgolang.И я достиг вышеуказанного кода после множества проб и ошибок и поиска в Google.Теперь это работает.Тем не менее, мне не кажется интуитивным, когда я смотрю на это (это может быть очень хорошо, потому что я все еще пытаюсь освоить способ Го делать вещи).Итак, мой вопрос, могу ли я реорганизовать это в лучшую форму?Есть ли какая-то существующая модель, которая применима в этом сценарии?Или, если есть какой-то совершенно иной подход к продолжению отправки периодических обновлений во время выполнения задания?
Кроме того, любые предложения по улучшению моего параллелизма golang также приветствуются.:)
Заранее спасибо!