Я написал goroutine внутри для цикла, как следует. Я хочу выполнить goroutine для каждого элемента в списке listDevices одновременно, но эта логика запускает goroutine только для одного элемента в списке listDevices.Параллельные goroutines внутри петли for
for _, ip := range listOfDevices {
inChan <- types.NewNotification(time.Now(), "/cloudtracer/status", nil,
&map[key.Key]interface{}{
key.New(ip): types.Pointer{Pointer: "/cloudtracer/status/" + ip},
})
pingOneMachine := probe.NewPing(ip, 2*time.Second, inChan)
// For now stopping the probe after few minutes. This will change later
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
wg.Add(len(listOfDevices))
go func() {
defer wg.Done()
pingOneMachine.Run(ctx)
}()
}
wg.Wait()
Может ли кто-нибудь помочь мне в исправлении этого? благодарит заранее.
'wg.Add (len (listOfDevices))' в цикле кажется неправильным, переместите его перед циклом. Или замените его на 'wg.Add (1)'. – ain
Что такое дюйм определено как? Это буферный канал или канал с постоянным считывателем? – kca
Похоже, что inchan имеет емкость 1, играйте с большими значениями. –