у меня есть следующий идти-код:Go ждать goroutines но делать такие вещи, в то же время
func execTask(input int, results chan<- int) {
//do stuff (in my case, start process and return something)
results <- someResult
}
func main() {
results := make(chan int)
for _, task := range tasks {
go execTask(task, results)
}
for result := range results {
fmt.Println(result)
}
}
Для линии for result := range results {
я получаю ошибку: fatal error: all goroutines are asleep - deadlock!
. В подпрограмме execTask
я фактически выполняю процесс с os/exec, поэтому я не знаю, сколько результатов есть в results
. Поэтому я должен ждать завершения всех моих процессов, но тем временем что-то делать с результатами. Когда все процессы завершаются, моя go-Programm также может быть прервана.
Как это сделать?
Спасибо, Lars
результатов: = сделать (чан INT) для _ задачи: = задача диапазона { идет execTask (задачи, результаты) } Задача также призывают результаты, которые могут привести к тупиковой ситуации .. – MarmiK