Golang sync.WaitGroup Never Completes: Kisah Nyahpepijat
Dalam pengaturcaraan serentak, mengurus penamatan goroutine dengan anggun adalah penting. sync.WaitGroup membolehkan anda menjejaki penyiapan berbilang tugas dan menunggu sehingga semuanya selesai. Walau bagaimanapun, jika WaitGroup anda nampaknya tidak pernah selesai, mungkin terdapat beberapa isu asas.
Salah satu isu tersebut ialah penggunaan kaedah Tambah dan Selesai yang salah. Dalam kod yang diberikan, di mana kami mengambil dan memuat turun fail secara serentak, kaedah Tambah dan Selesai tidak digunakan dengan betul. Untuk memastikan WaitGroup dikemas kini dengan betul, adalah penting untuk menghantar penunjuk kepada WaitGroup kepada goroutine dan bukannya salinan.
func main() { ... go downloadFromURL(url, &wg) ... }
Isu lain timbul apabila panggilan wg.Done() tidak diletakkan sebagai salah satu kenyataan pertama dalam goroutine. Jika ralat berlaku dalam goroutine dan fungsi kembali lebih awal, panggilan wg.Done() mungkin tidak dapat dilaksanakan.
func downloadFromURL(url string, wg *sync.WaitGroup) error { defer wg.Done() ... }
Dengan meletakkan panggilan wg.Done() sebagai pernyataan pertama, kami memastikan bahawa ia sentiasa dilaksanakan tanpa mengira sebarang ralat berikutnya. Pengubahsuaian ini memastikan WaitGroup dikurangkan dengan betul, dan goroutine utama boleh mengesan penyiapan semua muat turun fail, menghalang program daripada tergantung selama-lamanya.
Atas ialah kandungan terperinci Mengapa My Go Tidak `sync.WaitGroup` Pernah Selesai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!