我已經在循環中寫入goroutine,如下所示。我想要的是同時爲listofDevices列表中的每個項目執行goroutine,但是此邏輯正在爲listofDevices列表中的一個項目運行goroutine。for循環中的併發goroutines
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
什麼是inchan定義爲?它是一個緩衝頻道還是一個帶有恆定閱讀器的頻道? – kca
它看起來像inchan有1的容量,發揮更大的價值。 –