Golangsync.WaitGroup Never Completes
提供的程式碼透過取得URL 清單並有條件地下載和儲存檔案到檔案到檔案系統。主 goroutine 等待使用sync.WaitGroup 取得所有檔案。但是,即使完成所有請求,程式也無法退出。
要理解此問題,請考慮 WaitGroup 的功能。它維護正在執行的 goroutine 的計數。如果計數達到零,waitgroup 立即返回,表示所有 goroutine 已完成執行。
在給定的程式碼中,WaitGroup 的 Add 方法用於增加計數,而 Done 方法用於減少計數。如果 Add 方法被呼叫的次數多於 Done 方法,反之亦然,WaitGroup 將永遠不會達到零,導致主 goroutine 無限期等待。
提供的程式碼中有兩個錯誤:
func main() { ... go downloadFromURL(url, &wg) ... }
func downloadFromURL(url string, wg *sync.WaitGroup) error { defer wg.Done() ... }
完成這些修正後,WaitGroup 將正確運行,隨著goroutine 完成其計數而減少其計數任務,最終導致主協程成功退出。
以上是為什麼我的 Gosync.WaitGroup 沒有完成?的詳細內容。更多資訊請關注PHP中文網其他相關文章!