2017-05-06 43 views
-1

我有一個夠程在運行中的for循環:如何關閉所有睡覺的「goroutines」?

func main(){ 
      for _, i := range x{ 
       go httpRequests(i, ch) 
      } 

      for i := range ch{ 
       print i 

     } 
    } 

func httpRequests(i, ch){ 
      for _, x := range y{ 
       go func(string x){ 
        do something with i 
        ch <- result 
       }(x) 
      } 


      } 

當我運行,它說,所有夠程都睡着了。有什麼建議麼?

+0

時須出示實際的代碼。 – Volker

+0

我想我的示例代碼在上面的鏈接足以讓我開始。如果您運行該代碼,則可以看到它的打印輸出相同。我想要的是迭代通過ID並打印所有的 – shishh03

+1

我沒有時間調試此代碼,但我建議你閱讀整個文檔: https://github.com/golang/go/wiki/ CommonMistakes#using-goroutines-on-loop-iterator-variables –

回答

2

您開始了3個門店(go serviceReq(i, httpCh)),向他們傳遞了一個渠道。然後你只收到那個頻道一次ch := (<-httpCh).serviceData)。

相反的,你應該接受一個循環:

for resp := range httpCh { 
    output = append(output, resp.serviceData) 
} 
+0

謝謝,這很有道理,但現在我被卡在「所有goroutines睡着了 - 僵局」。我一直在試圖添加waitgroups並關閉頻道,但沒有進展。有什麼建議麼? – shishh03