Rumah >pembangunan bahagian belakang >Golang >Mengapa Kes Tamat Masa Goroutine Saya Tidak Dilaksanakan Apabila Menggunakan Saluran?

Mengapa Kes Tamat Masa Goroutine Saya Tidak Dilaksanakan Apabila Menggunakan Saluran?

Linda Hamilton
Linda Hamiltonasal
2024-12-19 10:03:08751semak imbas

Why Doesn't My Goroutine Timeout Case Execute When Using Channels?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn