Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menghentikan Pelaksanaan Goroutine dengan Betul Selepas Tamat Masa dalam Perjalanan?
Menghentikan Pelaksanaan Goroutine dengan Tamat Masa dalam Pergi
Apabila cuba menamatkan pelaksanaan goroutine apabila tamat masa, ia mungkin kelihatan tidak berkesan. Ini kerana model konkurensi Go beroperasi pada prinsip cantuman garpu, di mana memulakan goroutine (garpu) tidak memberikan kawalan segera ke atas pelaksanaannya. Kawalan hanya diperoleh semula pada titik penyegerakan, seperti komunikasi saluran.
Dalam contoh yang diberikan:
go func() { time.Sleep(10 * time.Second) fmt.Println("test") fmt.Println("test1") ch <- Response{data: "data", status: true} }()
Groutine meneruskan pelaksanaan walaupun tamat masa ditetapkan dalam:
case <-time.After(50 * time.Millisecond): return "Timed out", false
Ini kerana tamat masa adalah berkaitan dengan penerima (pembaca) saluran, bukan pengirim. Memandangkan saluran ditimbal, pengirim boleh terus melaksanakan tanpa gangguan.
Untuk mencapai gelagat yang diingini, teknik penyegerakan mesti digunakan. Sebagai contoh, saluran boleh ditutup apabila tamat masa untuk menghalang komunikasi selanjutnya:
select { case <-ch: fmt.Println("Read from ch") res := <-ch return res.data, res.status case <-time.After(50 * time.Millisecond): close(ch) return "Timed out", false }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghentikan Pelaksanaan Goroutine dengan Betul Selepas Tamat Masa dalam Perjalanan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!