Kes Tamat Masa Tidak Dilaksanakan dalam GoroutineChannels
Dalam coretan kod yang menampilkan goroutine dan saluran, pengguna menghadapi situasi yang membingungkan apabila kes tamat masa masuk penyataan pilih kekal tidak dilaksanakan.
Kod yang disediakan telah ditetapkan dua goroutine, satu menghantar nilai ke saluran setiap 1.5 saat, dan satu lagi mendengar nilai atau mencetuskan tamat masa selepas 2 saat. Walau bagaimanapun, kes tamat masa tidak pernah berlaku.
Mengapa kelakuan ini diperhatikan?
Kuncinya terletak pada penciptaan berulang saluran tamat masa dalam setiap lelaran gelung pilihan. Setiap kali nilai diterima daripada saluran c1, saluran baharu dijana mengikut masa. Selepas(). Saluran baharu ini akan menerima nilai selepas 2 saat lagi, tetapi saluran tamat masa sebelumnya menjadi usang. Oleh itu, kes tamat masa tidak boleh dilaksanakan.
Untuk membetulkan isu ini dan memastikan tamat masa berlaku seperti yang dijangkakan, buat saluran tamat masa hanya sekali sebelum gelung pilihan. Dengan berbuat demikian, saluran kekal aktif sepanjang pelaksanaan program dan kes tamat masa akan dicetuskan selepas 2 saat tidak aktif pada saluran c1.
Atas ialah kandungan terperinci Mengapa Kes Tamat Masa Goroutine Saya Tidak Dilaksanakan Apabila Menggunakan Saluran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!